【问题标题】:PHPSpreadsheet formula not working between datesPHPSpreadsheet公式在日期之间不起作用
【发布时间】:2020-08-31 15:15:32
【问题描述】:

我想用 PHPSpreadsheet 计算 2 个日期时间之间的差异。 Excel 就是这样做的:

A1 和 A2 单元格格式为:

这是网络上的结果:

当我通过 PHPSpreadsheet 更改值时,我得到#VALUE!以及不同的值格式。

$reader = PhpSpreadsheet\IOFactory::createReader("Xlsx");
$target_file = __DIR__ . '/test.xlsx';
$spreadsheet = $reader->load($target_file);
$spreadsheet->getActiveSheet()->setCellValue('A1', '24.6.2020 12:30');
$writer = new PhpSpreadsheet\Writer\Html($spreadsheet);
$output = $writer->generateHTMLHeader();
$output .= $writer->generateStyles(true);
$output .= $writer->generateSheetData();
$output .= $writer->generateHTMLFooter();
$doc = new DOMDocument();
@$doc->loadHTML($output);
echo $doc->saveHTML();

我也尝试过像 2020 年 6 月 24 日 14:30 这样的格式,但结果是一样的(#VALUE!)

$spreadsheet->getActiveSheet()->setCellValue('A1', '6/24/2020 14:30');

有人知道这应该怎么做吗?

【问题讨论】:

    标签: php excel datetime phpspreadsheet


    【解决方案1】:

    在 Excel 文档中,日期存储为数字,而不是字符串。所以你需要将正确的号码传递给setCellValue()

    PhpSpreadsheet 提供实用方法Date::stringToExcel() 将字符串转换为 Excel 日期。你可以这样使用它:

    $date = PhpSpreadsheet\Shared\Date::stringToExcel('2020-06-24 12:30');
    $spreadsheet->getActiveSheet()->setCellValue('A1', $date);
    

    【讨论】:

    • @wast 您可以使用任何格式来显示日期。 stringToExcel() 与格式化无关,只是计算内部数值。
    • @Oliver 我不知道这个功能,它肯定会在我的日常工作中帮助我。谢谢!
    • @Olivier 好的,但是如果字符串不是默认格式,函数如何知道如何解析字符串?
    • @wast stringToExcel() 需要格式为 YYYY-MM-DD HH:MI 的字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    相关资源
    最近更新 更多