PHPSpreadsheet 公式在日期之间不起作用
PHPSpreadsheet formula not working between dates
我想用 PHPSpreadsheet 计算两个日期时间之间的差异(以小时为单位)。 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();
我也尝试过这样的格式 6/24/2020 14:30 但结果是一样的 (#VALUE!)
$spreadsheet->getActiveSheet()->setCellValue('A1', '6/24/2020 14:30');
有人知道应该如何完成吗?
在 Excel 文档中,日期存储为数字,而不是字符串。所以你需要将正确的数字传递给 setCellValue()
.
PhpSpreadsheet 提供实用方法 Date::stringToExcel()
将字符串转换为 Excel 日期。你可以这样使用它:
$date = PhpSpreadsheet\Shared\Date::stringToExcel('2020-06-24 12:30');
$spreadsheet->getActiveSheet()->setCellValue('A1', $date);
我想用 PHPSpreadsheet 计算两个日期时间之间的差异(以小时为单位)。 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();
我也尝试过这样的格式 6/24/2020 14:30 但结果是一样的 (#VALUE!)
$spreadsheet->getActiveSheet()->setCellValue('A1', '6/24/2020 14:30');
有人知道应该如何完成吗?
在 Excel 文档中,日期存储为数字,而不是字符串。所以你需要将正确的数字传递给 setCellValue()
.
PhpSpreadsheet 提供实用方法 Date::stringToExcel()
将字符串转换为 Excel 日期。你可以这样使用它:
$date = PhpSpreadsheet\Shared\Date::stringToExcel('2020-06-24 12:30');
$spreadsheet->getActiveSheet()->setCellValue('A1', $date);