我正在尝试使用 PHPSpreadsheet 阅读电子表格文档,我在阅读表格中的日期时遇到问题,我想以其格式化的方式阅读它们,日期采用 YYYY-MM-DD 格式,使用单元格编号格式,当我以 ods 和 xls 格式保存工作表时,我得到不正确的日期格式,当我以 xlsx 格式保存工作表时,日期格式是正确的,下面是我用来读取电子表格的代码
$PHPSpreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file);
foreach ($PHPSpreadsheet->getWorksheetIterator() as $worksheet) {
foreach ($worksheet->getRowIterator() as $row) {
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false); // Loop all cells, even if it is not set
foreach ($cellIterator as $cell) {
if (!is_null($cell)) {
if (\PhpOffice\PhpSpreadsheet\Shared\Date::isDateTime($cell)) {
echo $cell->getStyle()->getNumberFormat()->getFormatCode();
echo '<br>';
echo $cell->getValue();
echo '<br>';
echo $cell->getCalculatedValue();
echo '<br>';
echo $cell->getFormattedValue();
echo '<br>';
}
}
}
}
}
这是我分别为 xlsx、ods、xls 得到的输出
YYYY\-MM\-DD
43196
43196
2018-04-06
d-mmm-yy h:mm:ss
43196.041666667
43196.041666667
6-Apr-18 1:00:00
d-mmm-yy h:mm:ss
43196.041666667
43196.041666667
6-Apr-18 1:00:00
我以 xlsx 格式保存时得到的输出是工作表中的正确格式,ods 是我最常使用的格式,我做错了什么还是 PHPSpreadsheet 的限制。
最佳答案
在 PHPSpreadsheet 的当前版本 1.10.1 中,该错误仅针对 XLS 得到修复,但未针对 ODS 得到修复!
在 Reader/Ods.php 中总是设置 NumberFormat::FORMAT_DATE_XLSX15 库实际上缺少对 ODS 文件中指定的日期格式的正确检测。
关于excel - ods 和 xls 中的 PHPSpreadsheet 不正确的日期格式代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51284109/