{"record":{"id":"e9d21f7ae3c850ff","repo":"PHPOffice/PhpSpreadsheet","slug":"column-is-not-within-the-table-range","errorCode":null,"errorMessage":"Column is not within the table range.","messagePattern":"Column is not within the table range\\.","errorType":"exception","errorClass":"PhpOffice\\PhpSpreadsheet\\Exception","httpStatus":null,"severity":"error","filePath":"src/PhpSpreadsheet/Worksheet/Table.php","lineNumber":448,"sourceCode":"        $pColumn = Coordinate::stringFromColumnIndex($rangeStart[0] + $columnOffset);\n\n        return $this->getColumn($pColumn);\n    }\n\n    /**\n     * Set Table.\n     *\n     * @param string|Table\\Column $columnObjectOrString\n     *            A simple string containing a Column ID like 'A' is permitted\n     */\n    public function setColumn(string|Table\\Column $columnObjectOrString): self\n    {\n        if ((is_string($columnObjectOrString)) && (!empty($columnObjectOrString))) {\n            $column = $columnObjectOrString;\n        } elseif ($columnObjectOrString instanceof Table\\Column) {\n            $column = $columnObjectOrString->getColumnIndex();\n        } else {\n            throw new PhpSpreadsheetException('Column is not within the table range.');\n        }\n        $this->isColumnInRange($column);\n\n        if (is_string($columnObjectOrString)) {\n            $this->columns[$columnObjectOrString] = new Table\\Column($columnObjectOrString, $this);\n        } else {\n            $columnObjectOrString->setTable($this);\n            $this->columns[$column] = $columnObjectOrString;\n        }\n        ksort($this->columns);\n\n        return $this;\n    }\n\n    /**\n     * Clear a specified Table Column.\n     *\n     * @param string $column Column name (e.g. A)","sourceCodeStart":430,"sourceCodeEnd":466,"githubUrl":"https://github.com/PHPOffice/PhpSpreadsheet/blob/65b080eef4d9fd11a5796135ab145883e5c3d6a6/src/PhpSpreadsheet/Worksheet/Table.php#L430-L466","documentation":"Thrown by Table::setColumn() when the argument is neither a non-empty string nor a Table\\Column instance: the else branch of its type dispatch. Note PHP empty() treats both '' and '0' as empty, so even a string column letter of '0' (not a valid letter anyway) lands here.","triggerScenarios":"$table->setColumn('') with an empty string (e.g. a column letter variable that was never assigned); $table->setColumn('0'); passing an object that is not PhpSpreadsheet\\Worksheet\\Table\\Column (a look-alike DTO or an AutoFilter column).","commonSituations":"Deriving the column letter from an empty header cell (getCell(...)->getValue() returning null/'') and passing it straight through; mixing AutoFilter\\Column and Table\\Column objects in shared code.","solutions":["Pass a real column letter string like 'A' or a Table\\Column instance","Skip/guard empty values before the call: if ($col !== '') { $table->setColumn($col); }","When the letter comes from data, map it through Coordinate::stringFromColumnIndex() from a numeric index you control"],"exampleFix":"// before\n$letter = $sheet->getCellByColumnAndRow(1, 1)->getValue(); // may be ''\n$table->setColumn($letter); // throws when empty\n\n// after\n$letter = Coordinate::stringFromColumnIndex($colIndex);\nif ($letter !== '') {\n    $table->setColumn($letter);\n}","handlingStrategy":"type-guard","validationCode":"if (is_string($col) && $col !== '' && $col !== '0') {\n    $table->setColumn($col);\n} elseif ($col instanceof \\PhpOffice\\PhpSpreadsheet\\Worksheet\\Table\\Column) {\n    $table->setColumn($col);\n}","typeGuard":"/** @param mixed $col */\nfunction isValidTableColumn($col): bool\n{\n    return ($col instanceof \\PhpOffice\\PhpSpreadsheet\\Worksheet\\Table\\Column)\n        || (is_string($col) && $col !== '' && $col !== '0');\n}","tryCatchPattern":null,"preventionTips":["Never feed raw cell values in as column letters — map numeric indexes through Coordinate::stringFromColumnIndex()","Keep Table\\Column and AutoFilter\\Column in strictly separate code paths","Early-return on empty inputs at your data boundary instead of letting them reach the library"],"tags":["phpspreadsheet","table","column","empty-argument","argument-validation"],"backgroundTag":"invalid-argument-value","analyzedSha":"65b080eef4d9fd11a5796135ab145883e5c3d6a6","analyzedAt":"2026-08-17T05:40:41.646Z","schemaVersion":2},"datasetVersion":"2026-08-17T09:17:11.063Z"}