Я работаю с phpspreadsheet и хочу изменить файл xlsx на 4 листа. Я хочу вставить данные только в 2 листа, но хочу скопировать все 4 листа в новый файл xlsx. Когда я это делаю, я получаю эту ошибку:
Неустранимая ошибка: допустимый объем памяти 536870912 байт исчерпан (попытка выделить 20480 байт)
Это происходит из-за листы тяжелые, но этот тяжелый лист я только хочу скопировать, а не модифицировать. Я попытался загрузить это:
ini_set('memory_limit', -1);
Но это не работает для меня, потому что он выходит за пределы определенного времени выполнения (более 120 секунд).
Я также попробовал это:
$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);
Но теперь я получаю еще одну ошибку:
Неустранимая ошибка: необученная ошибка: вызов функции-члена getCell () для null в C: \ xampp \ htdocs \ OfferConfigurator \ vendor \ phpoffice \ phpspreadsheet \ src \ PhpSpreadsheet \ Calculation. * Calculation. php: 2785 Трассировка стека: # 0 C: \ xampp \ htdocs \ OfferConfigurator \ vendor \ phpoffice \ phpspreadsheet \ src \ Php. . php (262): PhpOffice \ PhpSpreadsheet \ Calculation \ Calculation-> calculateCellValue (Object (PhpOffice \ PhpSpreadsheet \ Cell \ Cell), true) # 1 C: \ xampp \ htdocs \ OfferConfigurator \ vendor \ phpoffheet \ php \ src \ PhpSpreadsheet \ Writer \ Xlsx \ Worksheet. php (1077): P hpOffice \ PhpSpreadsheet \ Cell \ Cell-> getCalculatedValue () # 2 C: \ xampp \ htdocs \ OfferConfigurator \ vendor \ phpoffice \ phpspreadsheet \ src \ PhpSpreadsheet \ Writer \ Xlsx \ Worksheet. php 10ff: * PhpSpreadsheet \ Writer \ Xlsx \ Worksheet-> writeCell (Объект (PhpOffice \ PhpSpreadsheet \ Shared \ XMLWriter), Объект (PhpOffice \ PhpSpreadsheet \ Worksheet \ Worksheet), 'M7', Array) # 3 C: \ xampp \ htdocs OfferConfigurator \ vendor \ phpoffice \ phpspreadsheet \ src \ PhpSpreadsheet \ Writer \ Xlsx \ Worksheet. php (76): PhpOffice в C: \ xampp \ htdocs \ OfferConfigurator \ vendor \ phpoffice \ phpspreadsp \ Calculate \ phpspreadspheet \ ss Вычисление. php в строке 2785
Я думаю, это потому, что с помощью клона вы не можете копировать формулы. Может ли это быть причиной? Это другое решение для копирования листа с формулами?