Kullanıcının istediği veriyi indirip doldurabileceği bir xls şablonu oluşturmak için PHPExcel kullanıyorum. Bilindiği gibi, excel tarihi bir formatta kaydeder. Ben verileri dönüştürmek ve zaman damgası dönmek için bu işlevi kullanıyorum:Windows veya PHPExcel kullanan bir excel dosyası oluşturuldu mu algılamanın bir yolu var mı?
public static function excelToTimestamp($excelDateTime, $isMacExcel=false) {
$myExcelBaseDate = $isMacExcel ? 24107 : 25569; // 1st jan 1904 or 1st jan 1900
if (!$isMacExcel && $excelDateTime < 60) {
// Adjust for the spurious 29-Feb-1900 (Day 60)
--$myExcelBaseDate;
}
// Perform conversion
if ($excelDateTime >= 1) {
$timestampDays = $excelDateTime - $myExcelBaseDate;
$timestamp = round($timestampDays * 86400);
if (($timestamp <= PHP_INT_MAX) && ($timestamp >= -PHP_INT_MAX)) {
$timestamp = intval($timestamp);
}
} else {
$hours = round($excelDateTime * 24);
$mins = round($excelDateTime * 1440) - round($hours * 60);
$secs = round($excelDateTime * 86400) - round($hours * 3600) - round($mins * 60);
$timestamp = (integer) gmmktime($hours, $mins, $secs);
}
return $timestamp;
}
Sorun kullanıcı sisteme ithal dosya mac veya pencereler için excel kullanılarak doldurulmuş olup olmadığını tespit etmek zorunda olduğunu
, bu yüzden tarihi doğru şekilde ayarlayabildiğim (Mac, 1900'ü kullanırken, 1904 takvim kullanır).
PHPExcel kullanarak bunu algılamanın bir yolu olup olmadığını bilmek istiyorum. Değilse, ben bunu
Çıktı (önceden cevap vermeden önce), PHPExcel'de zaten yerleşik olduğunda kendi tarih dönüştürme işlevlerinizi yazmanın belirli bir nedeni var mı? –
çünkü readonlydata'yı belgede doğru olarak ayarladım: “Çalışma Kitaplarının (ve PHPExcel) tarih ve saatleri basit sayısal değerler olarak sakladığını unutmamak önemlidir: bunlar yalnızca diğer sayısal değerlerden ayırt edilebilirler. Bu hücreye uygulanan format maskesi.Parça verileri sadece true olarak ayarlandığında, PHPExcel hücre formatı maskelerini okumaz, bu yüzden tarihler/zamanlar ve sayılar arasında ayrım yapmak mümkün değildir. " ve sadece gnumerik için destekleniyor, değil mi? – Periback
aslında .. Bu yöntemi kullanmak benim için zorunlu değil (readonlydata) ... Daha basit bir şekilde yapılabilir mi? – Periback