{"record":{"id":"254d9db32e03dd9e","repo":"PHPOffice/PhpSpreadsheet","slug":"invalid-operator-for-column-autofilter-rule","errorCode":null,"errorMessage":"Invalid operator for column AutoFilter Rule.","messagePattern":"Invalid operator for column AutoFilter Rule\\.","errorType":"exception","errorClass":"PhpOffice\\PhpSpreadsheet\\Exception","httpStatus":null,"severity":"error","filePath":"src/PhpSpreadsheet/Worksheet/AutoFilter/Column/Rule.php","lineNumber":309,"sourceCode":"\n    /**\n     * Set AutoFilter Rule Operator.\n     *\n     * @param string $operator see self::AUTOFILTER_COLUMN_RULE_*\n     *\n     * @return $this\n     */\n    public function setOperator(string $operator): static\n    {\n        $this->setEvaluatedFalse();\n        if (empty($operator)) {\n            $operator = self::AUTOFILTER_COLUMN_RULE_EQUAL;\n        }\n        if (\n            (!in_array($operator, self::OPERATORS))\n            && (!in_array($operator, self::TOP_TEN_VALUE))\n        ) {\n            throw new PhpSpreadsheetException('Invalid operator for column AutoFilter Rule.');\n        }\n        $this->operator = $operator;\n\n        return $this;\n    }\n\n    /**\n     * Get AutoFilter Rule Grouping.\n     */\n    public function getGrouping(): string\n    {\n        return $this->grouping;\n    }\n\n    /**\n     * Set AutoFilter Rule Grouping.\n     *\n     * @return $this","sourceCodeStart":291,"sourceCodeEnd":327,"githubUrl":"https://github.com/PHPOffice/PhpSpreadsheet/blob/65b080eef4d9fd11a5796135ab145883e5c3d6a6/src/PhpSpreadsheet/Worksheet/AutoFilter/Column/Rule.php#L291-L327","documentation":"Rule::setOperator() accepts the six comparison operators (equal, notEqual, greaterThan, greaterThanOrEqual, lessThan, lessThanOrEqual) plus the top-ten selectors 'byValue' and 'byPercent'; an empty operator defaults to 'equal'. Anything outside those lists throws.","triggerScenarios":"->setOperator('=='), ->setOperator('contains'), ->setOperator('>') or SQL-style symbols — none are in the accepted vocabulary.","commonSituations":"Translating SQL/Excel UI operator names or symbols directly to the API; unvalidated operator strings from configuration files.","solutions":["Use Rule::AUTOFILTER_COLUMN_RULE_* constants (e.g. Rule::AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL), and 'byValue'/'byPercent' for top-ten rules","Map external operator symbols ('>' => 'greaterThan') explicitly before calling setOperator()","Omit the operator entirely when you want equality"],"exampleFix":"// before\n$rule->setOperator('>=' );\n\n// after\n$rule->setOperator(\\PhpOffice\\PhpSpreadsheet\\Worksheet\\AutoFilter\\Column\\Rule::AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL);","handlingStrategy":"validation","validationCode":"use PhpOffice\\PhpSpreadsheet\\Worksheet\\AutoFilter\\Column\\Rule;\n$map = [\n    '=' => Rule::AUTOFILTER_COLUMN_RULE_EQUAL,\n    '<>' => Rule::AUTOFILTER_COLUMN_RULE_NOTEQUAL,\n    '>' => Rule::AUTOFILTER_COLUMN_RULE_GREATERTHAN,\n    '>=' => Rule::AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL,\n    '<' => Rule::AUTOFILTER_COLUMN_RULE_LESSTHAN,\n    '<=' => Rule::AUTOFILTER_COLUMN_RULE_LESSTHANOREQUAL,\n];\n$operator = $map[$operator] ?? Rule::AUTOFILTER_COLUMN_RULE_EQUAL;\n$rule->setOperator($operator);","typeGuard":"function isValidRuleOperator(string $operator): bool\n{\n    $valid = ['equal', 'notEqual', 'greaterThan', 'greaterThanOrEqual', 'lessThan', 'lessThanOrEqual', 'byValue', 'byPercent'];\n\n    return in_array($operator, $valid, true);\n}","tryCatchPattern":"try {\n    $rule->setOperator($operator);\n} catch (\\PhpOffice\\PhpSpreadsheet\\Exception $e) {\n    $rule->setOperator(Rule::AUTOFILTER_COLUMN_RULE_EQUAL);\n}","preventionTips":["Translate symbols/UI labels to AUTOFILTER_COLUMN_RULE_* constants yourself","For top-ten rules use 'byValue'/'byPercent', not percentages or numbers"],"tags":["autofilter","operator","enum","validation","phpspreadsheet"],"backgroundTag":"invalid-enum-value","analyzedSha":"65b080eef4d9fd11a5796135ab145883e5c3d6a6","analyzedAt":"2026-08-17T05:40:41.646Z","schemaVersion":2},"datasetVersion":"2026-08-17T09:17:11.063Z"}