PHPExcelを使用してExcelから日付を取得しようとしています。しかし、私は日付を取得していません。1970年からの秒ではない文字列値を取得しています。
私が試したコードは
$InvDate=trim($Excel->getActiveSheet()->getCell('B' . $i)->getValue());
使用してみてください
$cell = $Excel->getActiveSheet()->getCell('B' . $i);
$InvDate= $cell->getValue();
if(PHPExcel_Shared_Date::isDateTime($cell)) {
$InvDate = date($format, PHPExcel_Shared_Date::ExcelToPHP($InvDate));
}
追伸.
@DiegoDD:$ formatが日付の望ましい形式であることを言及する必要があります。例えば。:
$InvDate = date($format = "Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($InvDate));
P.P.S. 2019回答@ gabriel-lupuを見て、PhpOfficeの新しいバージョンで https://stackoverflow.com/a/45070205/4265
日付の場合、getValue()はfloatを返す必要があります。これは、その日付/時刻のExcelシリアル化タイムスタンプ値です。文字列にキャストしているのはtrim()であると思われます。実際の値は、1/1/1900(またはスプレッドシートが使用しているカレンダーに応じて1/1/1904)以降の日数です。
GetValue()の代わりにgetFormattedValue()またはgetCalculatedValue()を呼び出すと、セルのnumberformatmaskに従って人間が読める文字列としてフォーマットされた日付が返されます。
または、セルに日付/時刻の数値フォーマットマスクがあるかどうかをテストし、適切なヘルパーメソッドを呼び出してそのExcelシリアル化タイムスタンプをUNIXタイムスタンプに変換し、通常のPHP date関数を使用してフォーマットします$ formatの値に応じて人間が読み取れるようになります。Excelシリアル化タイムスタンプをPHP DateTimeオブジェクトに変換する同様のヘルパーメソッドPHPExcel_Shared_Date :: ExcelToPHPObject()があります。
新しいバージョンのライブラリ PhpOffice では、これを処理する関数は excelToDateTimeObject であるため、新しいコード形式は次のようになります。
$cell = $Excel->getActiveSheet()->getCell('B' . $i);
$InvDate= $cell->getValue();
if (PhpOffice\PhpSpreadsheet\Shared\Date::isDateTime($cell)) {
$InvDate = PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($InvDate);
}
この方法でセル値を文字列(日付値も)として取得できます。
$sheet = $objPHPExcel->getActiveSheet();
$lastRow = $sheet->getHighestRow();
$lastColumn = $sheet->getHighestColumn();
$rows = $sheet->rangetoArray('A2:'.$lastColumn . $lastRow, NULL, True, True, False);
foreach ($rows as $row => $cols) {
foreach($cols as $col => $cell) {
echo trim($cell).'<br>'; // Gives the value as string
}
}