{"record":{"id":"92f6578a05106afb","repo":"PHPOffice/PhpSpreadsheet","slug":"invalid-worksheet-for-specified-range","errorCode":null,"errorMessage":"Invalid Worksheet for specified Range","messagePattern":"Invalid Worksheet for specified Range","errorType":"exception","errorClass":"PhpOffice\\PhpSpreadsheet\\Exception","httpStatus":null,"severity":"error","filePath":"src/PhpSpreadsheet/Style/Style.php","lineNumber":223,"sourceCode":"                $ranges = explode(',', $pRange);\n                $sheet = $this->getActiveSheet();\n                foreach ($ranges as $range) {\n                    $sheet\n                        ->setSelectedCells(trim($range));\n                    $this->applyFromArray($styleArray, $advancedBorders);\n                }\n                $sheet->setSelectedCells($pRange);\n\n                return $this;\n            }\n\n            // Uppercase coordinate and strip any Worksheet reference from the selected range\n            $pRange = strtoupper($pRange);\n            if (str_contains($pRange, '!')) {\n                $pRangeWorksheet = StringHelper::strToUpper(substr($pRange, 0, (int) strrpos($pRange, '!')));\n                $pRangeWorksheet = Worksheet::unApostrophizeTitle($pRangeWorksheet);\n                if ($pRangeWorksheet !== '' && StringHelper::strToUpper($this->getActiveSheet()->getTitle()) !== $pRangeWorksheet) {\n                    throw new Exception('Invalid Worksheet for specified Range');\n                }\n                $pRange = strtoupper(Functions::trimSheetFromCellReference($pRange));\n            }\n\n            // Is it a cell range or a single cell?\n            if (!str_contains($pRange, ':')) {\n                $rangeA = $pRange;\n                $rangeB = $pRange;\n            } else {\n                [$rangeA, $rangeB] = explode(':', $pRange);\n            }\n\n            // Calculate range outer borders\n            $rangeStart = Coordinate::coordinateFromString($rangeA);\n            $rangeEnd = Coordinate::coordinateFromString($rangeB);\n            $rangeStartIndexes = Coordinate::indexesFromString($rangeA);\n            $rangeEndIndexes = Coordinate::indexesFromString($rangeB);\n","sourceCodeStart":205,"sourceCodeEnd":241,"githubUrl":"https://github.com/PHPOffice/PhpSpreadsheet/blob/65b080eef4d9fd11a5796135ab145883e5c3d6a6/src/PhpSpreadsheet/Style/Style.php#L205-L241","documentation":"Style::applyFromArray()/getStyle() accepts range strings that may carry a worksheet prefix such as 'Summary!A1:C10'. After uppercasing and stripping quotes, the prefixed sheet title must equal the currently active sheet's title, because the Style being modified belongs to one worksheet. Any other sheet name in the prefix throws this exception.","triggerScenarios":"$sheetA->getStyle('SheetB!A1') while the active sheet is SheetA; styling a range string copied from a formula or defined name that references another sheet.","commonSituations":"Code that styles cells of a non-active sheet without switching sheets first; UI range pickers that return fully-qualified 'Sheet!Range' strings; template code reused across sheets.","solutions":["Get the style from the right sheet: $spreadsheet->getSheetByName('SheetB')->getStyle('A1:C10')","Or activate the target sheet first: $spreadsheet->setActiveSheetIndex($spreadsheet->getIndex($sheetB))","Strip the worksheet prefix from the range string before passing it"],"exampleFix":"// before\n$sheetA->getStyle('SheetB!A1:B2')->applyFromArray($style);\n\n// after\n$spreadsheet->getSheetByName('SheetB')->getStyle('A1:B2')->applyFromArray($style);","handlingStrategy":"validation","validationCode":"[$sheetName] = \\PhpOffice\\PhpSpreadsheet\\Worksheet\\Worksheet::extractSheetTitle($range);\nif ($sheetName !== null && strtoupper($sheetName) !== strtoupper($sheet->getTitle())) {\n    $sheet = $spreadsheet->getSheetByName($sheetName);\n    $range = substr($range, strrpos($range, '!') + 1);\n}\n$sheet->getStyle($range)->applyFromArray($style);","typeGuard":null,"tryCatchPattern":"try {\n    $sheet->getStyle($range)->applyFromArray($style);\n} catch (\\PhpOffice\\PhpSpreadsheet\\Exception $e) {\n    // range pointed at another sheet: resolve it and retry on that sheet\n}","preventionTips":["Prefer getSheetByName(...)->getStyle(...) over prefixed ranges","Never mix sheet-prefixed ranges with applyFromArray on an arbitrary active sheet"],"tags":["style","worksheet","cell-reference","range","phpspreadsheet"],"backgroundTag":"invalid-cell-reference","analyzedSha":"65b080eef4d9fd11a5796135ab145883e5c3d6a6","analyzedAt":"2026-08-17T05:40:41.646Z","schemaVersion":2},"datasetVersion":"2026-08-17T09:17:11.063Z"}