{"record":{"id":"a85ce793c7cc96ab","repo":"iOfficeAI/OfficeCLI","slug":"invalid-col-value-cbcolstr-column-breaks-m","errorCode":null,"errorMessage":"Invalid 'col' value: '{cbColStr}'. Column breaks must be between 1 and 16384 (A-XFD).","messagePattern":"Invalid 'col' value: '(.+?)'\\. Column breaks must be between 1 and 16384 \\(A-XFD\\)\\.","errorType":"validation","errorClass":"System.ArgumentException","httpStatus":null,"severity":"error","filePath":"src/officecli/Handlers/Excel/ExcelHandler.Add.Cells.cs","lineNumber":1383,"sourceCode":"    {\n        var index = position?.Index;\n        var cbSegments = parentPath.TrimStart('/').Split('/', 2);\n        var cbSheetName = cbSegments[0];\n        var cbWorksheet = FindWorksheet(cbSheetName)\n            ?? throw new ArgumentException($\"Sheet not found: {cbSheetName}\");\n        var cbWs = GetSheet(cbWorksheet);\n\n        var cbColStr = properties.GetValueOrDefault(\"col\") ?? properties.GetValueOrDefault(\"column\")\n            ?? properties.GetValueOrDefault(\"index\")\n            ?? throw new ArgumentException(\"'col' property is required for colbreak\");\n        // Accept both numeric index (e.g. \"3\") and column letter (e.g. \"C\")\n        var cbColIdx = uint.TryParse(cbColStr, out var cbNumVal)\n            ? cbNumVal\n            : (uint)ColumnNameToIndex(cbColStr.ToUpperInvariant());\n        // Same schema Min/Max guard as rowbreak: 0 / beyond-XFD ids write\n        // invalid OOXML that only surfaces at validate/open time.\n        if (cbColIdx < 1 || cbColIdx > 16384)\n            throw new ArgumentException(\n                $\"Invalid 'col' value: '{cbColStr}'. Column breaks must be between 1 and 16384 (A-XFD).\");\n\n        var colBreaks = cbWs.GetFirstChild<ColumnBreaks>();\n        if (colBreaks == null)\n        {\n            colBreaks = new ColumnBreaks();\n            cbWs.AppendChild(colBreaks);\n        }\n        // Optional restricted row span (min/max) — mirrors the Set path.\n        var cbBreak = new Break { Id = cbColIdx, Max = 1048575u, ManualPageBreak = true };\n        if (properties.TryGetValue(\"min\", out var cbMinS) && uint.TryParse(cbMinS, out var cbMin))\n            cbBreak.Min = cbMin;\n        if (properties.TryGetValue(\"max\", out var cbMaxS) && uint.TryParse(cbMaxS, out var cbMax))\n            cbBreak.Max = cbMax;\n        if (properties.TryGetValue(\"manual\", out var cbMan))\n            cbBreak.ManualPageBreak = IsTruthy(cbMan);\n        colBreaks.AppendChild(cbBreak);\n        colBreaks.Count = (uint)colBreaks.Elements<Break>().Count();","sourceCodeStart":1365,"sourceCodeEnd":1401,"githubUrl":"https://github.com/iOfficeAI/OfficeCLI/blob/1ced45e900782c5083ed550ddf328ee974e425e7/src/officecli/Handlers/Excel/ExcelHandler.Add.Cells.cs#L1365-L1401","documentation":"Thrown by AddColBreak when the resolved column index is less than 1 or greater than 16384 (column XFD, the last column in an OOXML grid). cbColIdx accepts either a numeric string (uint.TryParse) or a column letter (via ColumnNameToIndex), then range-checks. Out-of-grid ids produce invalid OOXML that Excel rejects at validate/open time.","triggerScenarios":"properties[\"col\"]=\"0\", properties[\"col\"]=\"16385\", or a letter beyond XFD (e.g. \"XFE\"). Note: an empty or non-letter/non-numeric col value fails uint.TryParse and then ColumnNameToIndex, which throws its own error before reaching this guard. This guard fires for values that parse but are out of grid range.","commonSituations":"0-based column indexing assumption. A letter string like \"AA\" that overflows when computed for a very wide sheet. Script-derived column index that exceeds XFD.","solutions":["Use a column in the range 1-16384 (numeric) or A-XFD (letter).","If the value came from a 0-based source, add 1 before passing it.","Clamp computed indices and warn if the clamp changes the value."],"exampleFix":"// before\nprops[\"col\"] = \"0\"; // 0-based\n\n// after\nprops[\"col\"] = \"1\"; // or \"A\" — OOXML columns are 1-based","handlingStrategy":"validation","validationCode":"string colStr = props.GetValueOrDefault(\"col\") ?? props.GetValueOrDefault(\"column\") ?? props.GetValueOrDefault(\"index\") ?? \"\";\nuint col = uint.TryParse(colStr, out var n) ? n : (uint)ColumnNameToIndex(colStr.ToUpperInvariant());\nif (col < 1 || col > 16384)\n    throw new ArgumentOutOfRangeException(\"col\", \"must be 1-16384 (A-XFD)\");\nhandler.Add(\"/Sheet1\", \"colbreak\", null, props);","typeGuard":"static bool IsValidColumn(uint col) => col >= 1 && col <= 16384;","tryCatchPattern":null,"preventionTips":["Treat column indices as 1-based (A=1).","Clamp computed column numbers to 1-16384 and warn on clamping.","Prefer letter form (A-XFD) for readability and validate the letter range."],"tags":["excel","ooxml","colbreak","range-validation","argument"],"backgroundTag":null,"analyzedSha":"1ced45e900782c5083ed550ddf328ee974e425e7","analyzedAt":"2026-08-13T13:01:07.193Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}