XLSXReader
[available on GitHub] is based on SimpleXLSX
[see answer by Sergey Shuchkin].
Convert dates from xlsx using XLSXReader::toUnixTimeStamp
.
sample.xlsx
sample.php
require [__DIR__ . '/../xlsxreader/XLSXReader.php'];
// entire workbook
$xlsx = new XLSXReader['sample.xlsx'];
$sheetNames = $xlsx->getSheetNames[];
// loop through worksheets
foreach [$sheetNames as $sheetName] {
$sheet = $xlsx->getSheet[$sheetName];
// worksheet header
echo['' . htmlentities[$sheetName] . '
' . PHP_EOL];
$xlsx_data = $sheet->getData[];
$header_row_xlsx = array_shift[$xlsx_data];
// header row
echo['' . PHP_EOL];
echo["\trow" . PHP_EOL];
for [$i = 0; $i < count[$header_row_xlsx]; $i++] {
$xlsx_field_name = '' . $header_row_xlsx[$i];
echo["\t" . htmlentities["$xlsx_field_name"] . '' . PHP_EOL];
}
echo[' ' . PHP_EOL];
// loop through data rows
$row_number = 1;
foreach [$xlsx_data as $row_xlsx] {
// data row
echo['' . PHP_EOL];
echo["\t" . htmlentities["$row_number"] . ' ' . PHP_EOL];
for [$i = 0; $i < count[$row_xlsx]; $i++] {
$xlsx_field_name = '' . [$i < count[$header_row_xlsx] ? $header_row_xlsx[$i] : ''];
if ["$xlsx_field_name" === "DoB"] {
// date value
$xlsx_field_value = DateTimeImmutable::
createFromFormat['U', XLSXReader::toUnixTimeStamp[$row_xlsx[$i]]]
->format['Y-m-d'];
} else {
// non-date value
$xlsx_field_value = $row_xlsx[$i];
}
echo["\t" . htmlentities["$xlsx_field_value"] . ' ' . PHP_EOL];
}
echo[' ' . PHP_EOL];
$row_number++;
}
echo["
" . PHP_EOL];
}
output
Sheet1
row
Name
Number
DoB
1
David
7
1988-11-12
2
Walt
8
1972-01-19
XLSXReader.php