当前位置: 首页 > 知识库问答 >
问题:

如何解决“允许内存大小耗尽”错误?

宗政斌
2023-03-14

我正在使用phpspreadsheet,我想修改一个有4张表的xlsx文件。我只想在2张表中插入数据,但我想将所有4张表复制到新的xlsx文件中。当我这样做时,我会得到以下错误:

ini_set('memory_limit', -1);
$inputFileType = 'Xls';
$inputFileName = './sampleData/example1.xls';
$sheetnames = ['Data Sheet #1','Data Sheet #3'];

/**  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);

编辑:我已经尝试用下面的代码复制我不需要编辑的工作表:

$spreadsheet1 =\PhpOffice\PhpSpreadsheet\IOFactory::load("./sampleData/example1.xls");
$clonedWorksheet = clone $spreadsheet1->getSheetByName('Data Sheet #2 ');
$clonedWorksheet->setTitle('Test');
$spreadsheet->addSheet($clonedWorksheet);

但现在我得到另一个错误:

致命错误:未捕获错误:调用C:\xampp\htdocs\offerconfigurator\vendor\phpoffice\phpspreadsheet\src\phpspreadsheet\calculation.php:2785堆栈跟踪:#0C:\xampp\htdocs\offerconfigurator\vendor\phpoffice\phpspreadsheet\src\phpspreadsheet\cell\cell.php(262):phpoffice\phpspreadsheet\cell\calculateCellvalue(对象pspreadsheet\src\phpspreadsheet\writer\xlsx\worksheet.php(1077):phpoffice\phpspreadsheet\cell\cell\getcalculatedvalue()#2c:\xampp\htdocs\offerconfigurator\vendor\phpoffice\phpspreadsheet\src\phpspreadsheet\writer\xlsx\worksheet.php(1027):phpoffice\phpspreadsheet\writer\xlsx\worksheet.php(ampp\htdocs\offerconfigurator\vendor\phpoffice\phpspreadsheet\src\phpspreadsheet\writer\xlsx\worksheet.php(76):PhpOffice在C:\xampp\htdocs\offerconfigurator\vendor\PhpOffice\phpspreadsheet\src\phpspreadsheet\calculation\calculation.php在第2785行

我认为这是因为克隆不能复制公式。这会是原因吗?用公式复制一张表是另一种解决方案吗?

共有1个答案

封昊天
2023-03-14

我终于找到了解决办法。问题出在编写器和公式上,所以将这一行添加到代码中,现在它工作得很好:

$writer->setPreCalculateFormulas(false);

所以现在编写器的所有代码是:

$writer = new Xlsx($spreadsheet);
$writer->setPreCalculateFormulas(false);
$writer->save('test.xlsx');
 类似资料:
  • 我正在尝试运行artisan make:controller。 我有一个问题: 我试图增加

  • 我有一个网页,可以将图像上传到我的API Laravel项目。它一直工作到我上传大小巨大或等于2mb的图像,并在nginx 500错误中运行: 我在stack overflow和google上读到了大量相同的问题,但似乎没有任何效果。 仔细阅读错误消息,我可以理解,从我的PHP配置,该网站可以采取134217728字节的内存,但它无法尝试分配73728字节:它有任何意义吗?它只在允许的最大128m

  • 我有以下代码: 不同的文件: 由于我编写了Mail()函数,因此出现以下错误: 致命错误:允许的内存大小134217728字节已用尽(尝试分配65488字节)

  • 我有并且有函数,此函数返回视图名称。 此视图包含大量详细信息,通常会有10到15组(行)详细信息显示在页面上(详细信息来自使用table的数据库)。 它的工作正常,但在某些情况下,当用户详细信息去30到35套(行),我得到下面的错误在error_log文件 PHP致命错误:允许内存大小为33554432字节耗尽(尝试分配5896720字节)在 /laravel/framework/src/Illu

  • 当我试图在PHP中操作大量数组并将结果作为HTTP POST请求的响应返回时,我遇到了一个致命错误: 允许内存大小536870912字节已用尽 我已经尝试设置以查看是否得到结果,但没有得到任何类型的响应。邮递员在我试图发出邮寄请求时总是崩溃。 数组的起始结构是这个。机身尺寸约为25mb。主阵列包含大约22k个具有此结构的阵列,我刚刚包括2个: 下面是php部分,用于操纵数组,以便通过分解每个用户的

  • 当我试图在PHP中操作大量数组并将结果作为HTTP POST请求的响应返回时,我遇到了一个致命错误: 允许内存大小536870912字节已用尽 我已经尝试设置以查看是否得到结果,但没有得到任何类型的响应。邮递员在我试图发出邮寄请求时总是崩溃。 数组的起始结构是这个。机身尺寸约为25mb。主阵列包含大约22k个具有此结构的阵列,我刚刚包括2个: 下面的php部分用于操作数组,以便通过爆炸每个用户的时