Skip to content

clone $clone->getSheetByName "Sheet does not exist" #4301

@vobizzz

Description

@vobizzz
  • 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions