5
私はPHPExcelを使ってxlsテンプレートを生成しています。このテンプレートをダウンロードして、自分が望むデータで埋め込むことができます。 わかっているように、Excelは日付を数値形式で保存します。私はデータを変換し、タイムスタンプを返すために、この機能を使用しています:PHPExcelを使用してWindowsまたはMacでExcelファイルが生成されたかどうかを検出する方法はありますか?
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;
}
問題は、私は、ユーザーがシステムにインポートされたファイルは、MacまたはWindows用のExcelを使用して充填したかどうかを検出しなければならないということです
ので、日付を正しく設定することができます(Macは1904カレンダーを使用し、Windowsは1900を使用します)。
PHPExcelを使用して検出する方法があるかどうかを知りたいと思います。そうでない場合、私は、ユーザーがラジオボタンでそれを知らせてみましょうことが、多分...
これらの機能がPHPExcelに組み込まれている場合、独自の日付変換関数を作成する理由は何ですか? –
私はreadonlydataをtrueに設定しているからです...ドキュメンテーションでは、「ワークブック(およびPHPExcel)は日付と時刻を単純な数値として保存することが重要です。これらの変数は他の数値としか区別できません。そのセルに適用される書式マスク読み込みデータをtrueに設定すると、PHPExcelはセル書式マスクを読み込まないため、日付と時刻を区別することはできません。それはgnumericでのみサポートされています。実際には – Periback
です。このメソッド(readonlydata)を使用することは必須ではありません...もっと簡単な方法で行うことはできますか? – Periback