我正在使用phpspreadsheet复制一个工作表,而我正在使用克隆进行复制。问题是,如果工作表没有公式,则该过程将成功结束。但是,如果该工作表具有公式,则会出现以下错误:
致命错误:允许的536870912字节的内存容量用尽(尝试分配67108872字节)C:\ xampp \ htdocs \ OfferConfigurator \ vendor \ phpoffice \ phpspreadsheet \ src \ PhpSpreadsheet \ Calculation \ Calculation.php在第4626行
这是我的代码:
$inputFileType = 'Xlsx';
$inputFileName = 'files/697D.xlsx';
$sheetnames = ['sheet0', 'sheet1', 'sheet2'];
/** Create a new Reader of the type defined in $inputFileType * */
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
/** Advise the Reader of which WorkSheets we want to load * */
$reader->setLoadSheetsOnly($sheetnames);
/** Load $inputFileName to a Spreadsheet Object * */
$spreadsheet = $reader->load($inputFileName);
/** Load xlsx file to copy the sheet * */
$spreadsheet1 = \PhpOffice\PhpSpreadsheet\IOFactory::load("files/697D.xlsx");
/** Clone worksheet * */
$clonedWorksheet = clone $spreadsheet1->getSheetByName('sheet4');
/** Set title of cloned worksheet * */
$clonedWorksheet->setTitle('sheet4');
/** Add clone worksheet * */
$spreadsheet->addExternalSheet($clonedWorksheet);
可能是克隆无法复制公式吗?
最后我找到了解决方案。问题出在编写者和公式上,因此请将此行添加到代码中,现在它可以正常工作:
$writer->setPreCalculateFormulas(false);
所以编写者的所有代码现在是:
$writer = new Xlsx($spreadsheet);
$writer->setPreCalculateFormulas(false);
$writer->save('test.xlsx');