PHPSpreadsheet 公式在日期之间不起作用

was*_*ast 3 php excel datetime phpspreadsheet

我想用 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();
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

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

$spreadsheet->getActiveSheet()->setCellValue('A1', '6/24/2020 14:30');
Run Code Online (Sandbox Code Playgroud)

任何人都知道应该如何做到这一点?

Oli*_*ier 5

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

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

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