提问人:Oleg 提问时间:10/3/2023 最后编辑:Oleg 更新时间:10/3/2023 访问量:30
如何修复读取时的未知错误,使用Phpspreadsheet更新Xlsx文件并作为PHP输出发送?
How fix unknown error while read, update Xlsx file with Phpspreadsheet and send as PHP output?
问:
我试图对HTTP请求执行操作以生成一些Xlsx文件。 开始时需要读取模板电子表格,向其添加一些数据并将其作为响应发送。 但是 PHPSpreadsheet 的失败原因不明。
use PhpOffice\PhpSpreadsheet\IOFactory;
$spreadsheet = IOFactory::load('test.xlsx');
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8');
header('Cache-Control: max-age=0');
header('Content-Disposition: attachment;filename="myfile.xlsx"');
ob_end_clean();
$writer->save('php://output');
exit(0);
但是此代码不会在浏览器上提供文件,并且会出现未知错误。控制台上的响应如下所示:
刚刚新创建的电子表格文件,仅填充了 A1 单元格:
但是,如果我只更改 1 行以创建新的电子表格,它就可以正常工作。
use PhpOffice\PhpSpreadsheet\IOFactory;
// $spreadsheet = IOFactory::load('test.xlsx');
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$spreadsheet->getActiveSheet()->setCellValueByColumnAndRow(1,1,'testV');
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
// same code next
我有:
- PHP格式:7.3
- phpoffice/phpspreadsheet:1.8.2
如何正确打开现有文件并将其发送到HTTP响应?
更新
就像提议@ADyson一样,在启用错误打印后,我得到了错误的电子表格:Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 41943040 bytes) in ...vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Worksheet.php on line 1371
是否可以说 Phpspreadsheet 只处理填充的行,而不是全部?
答: 暂无答案
评论
test.xlsx