-
Notifications
You must be signed in to change notification settings - Fork 3.6k
Description
- a bug report
What is the expected behavior?
Fatal error: Uncaught PhpOffice\PhpSpreadsheet\Exception: Sheet does not exist. in /Users/dave/Herd/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Spreadsheet.php:675
Stack trace:
#0 /Users/dave/Herd/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Worksheet.php(828): PhpOffice\PhpSpreadsheet\Spreadsheet->getIndex(Object(PhpOffice\PhpSpreadsheet\Worksheet\Worksheet))
#1 /Users/dave/Herd/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Spreadsheet.php(794): PhpOffice\PhpSpreadsheet\Worksheet\Worksheet->rebindParent(Object(PhpOffice\PhpSpreadsheet\Spreadsheet))
#2 /Users/dave/Herd//src/Views/Ajax/print/service/meetrapport.php(25): PhpOffice\PhpSpreadsheet\Spreadsheet->addExternalSheet(Object(PhpOffice\PhpSpreadsheet\Worksheet\Worksheet))
#10 /Applications/Herd.app/Contents/Resources/valet/server.php(167): require('/Users/dave/Her...')
#11 {main}
thrown in /Users/dave/Herd/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Spreadsheet.php on line 675
What is the current behavior?
I just update PHP from 7.4.6 to 8.4 and updated PHPSpreadsheet from 1.29.6 to 3.7.0.
And now my script gives errors and i think this is a change in PHPSpreadsheet, documentation did not change about getting sheets from external spreadsheet.
Sheet name is 100% correct.
What are the steps to reproduce?
My code:
<?php
$spreadsheet_clone = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_meetrapport);
$clonedWorksheet = clone $spreadsheet_clone->getSheetByName('inspectielijst');
$spreadsheet->addExternalSheet($clonedWorksheet);
$clonedWorksheet->setTitle('Inspectielijst ' . $i_unit);
$sheet = $spreadsheet->getSheetByName('Inspectielijst '.$i_unit);
?>
Worked fine for every PHPSpreadsheet version i worked with but now with the update it gives an error, checked the documentation and it is still the same and should work.
I think that version 3.7.0 that there has been some changes that this stoped working.
Check if PHPSpreadsheet could read the sheet name and directly add it to my code but it does not work.
<?php
$spreadsheet_clone = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_meetrapport);
$reader1 = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
$reader1->setReadDataOnly(TRUE);
$spreadsheet1 = $reader1->load($file_meetrapport);
print $spreadsheet1->getSheetNames()[0];
$clonedWorksheet = clone $spreadsheet_clone->getSheetByName( $spreadsheet1->getSheetNames()[0] );
$spreadsheet->addExternalSheet($clonedWorksheet);
$clonedWorksheet->setTitle('Inspectielijst ' . $i_unit);
$sheet = $spreadsheet->getSheetByName('Inspectielijst '.$i_unit);
?>
I tried to get sheet by index but it olso gives errors.
I now tried a different method without "addExternalSheet" and it worked!
The problem is with "addExternalSheet"
<?php
$clonedWorksheet = clone $spreadsheet_clone->getSheetByName('inspectielijst');
$clonedWorksheet->setTitle('Inspectielijst ' . $i_unit);
$spreadsheet->addSheet($clonedWorksheet);
$sheet = $spreadsheet->getSheetByName('Inspectielijst '.$i_unit);
?>
What features do you think are causing the issue
Version 3.7.0
"addExternalSheet" method
- Reader
- Writer
- Styles
- Data Validations
- Formula Calculations
- Charts
- AutoFilter
- Form Elements
Which versions of PhpSpreadsheet and PHP are affected?
3.7.0 / 8.4