3

我正在尝试使用 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 的限制。

4

1 回答 1

0

在 PHPSpreadsheet 的当前版本 1.10.1 中,该错误仅针对 XLS 修复,而不针对 ODS!

在 Reader/Ods.php 中始终设置 NumberFormat::FORMAT_DATE_XLSX15 该库实际上缺少对 ODS 文件中指定的日期格式的正确检测。

于 2020-02-19T14:19:32.617 回答