{"record":{"id":"c47951c1e970211a","repo":"iOfficeAI/OfficeCLI","slug":"no-charts-found-in-sheet","errorCode":null,"errorMessage":"No charts found in sheet","messagePattern":"No charts found in sheet","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/officecli/Handlers/Excel/ExcelHandler.Query.cs","lineNumber":673,"sourceCode":"        {\n            var af = GetSheet(worksheet).GetFirstChild<AutoFilter>();\n            var afNode = new DocumentNode { Path = path, Type = \"autofilter\" };\n            if (af?.Reference?.Value != null) afNode.Format[\"range\"] = af.Reference.Value;\n            if (af != null) PopulateAutoFilterCriteria(af, afNode);\n            return afNode;\n        }\n\n        // Chart axis-by-role sub-path: /Sheet1/chart[N]/axis[@role=ROLE].\n        // Per schemas/help/pptx/chart-axis.json (shared contract).\n        var chartAxisGetMatch = Regex.Match(cellRef,\n            @\"^chart\\[(\\d+)\\]/axis\\[@role=([a-zA-Z0-9_]+)\\]$\");\n        if (chartAxisGetMatch.Success)\n        {\n            var caChartIdx = int.Parse(chartAxisGetMatch.Groups[1].Value);\n            var caRole = chartAxisGetMatch.Groups[2].Value;\n            var caDrawingsPart = worksheet.DrawingsPart;\n            if (caDrawingsPart == null)\n                throw new ArgumentException($\"No charts found in sheet\");\n            var caAllCharts = GetExcelCharts(caDrawingsPart);\n            if (caChartIdx < 1 || caChartIdx > caAllCharts.Count)\n                throw new ArgumentException($\"Chart index {caChartIdx} out of range (1-{caAllCharts.Count})\");\n            var caChartInfo = caAllCharts[caChartIdx - 1];\n            if (caChartInfo.IsExtended || caChartInfo.StandardPart?.ChartSpace == null)\n                throw new ArgumentException($\"Axis not available on chart {caChartIdx}: extended charts not supported.\");\n            var axisNode = ChartHelper.BuildAxisNode(caChartInfo.StandardPart.ChartSpace, caRole, path);\n            if (axisNode == null)\n                throw new ArgumentException($\"Axis with role '{caRole}' not found on chart {caChartIdx}.\");\n            return axisNode;\n        }\n\n        // Chart path: /Sheet1/chart[N] or /Sheet1/chart[N]/series[K]\n        var chartMatch = Regex.Match(cellRef, @\"^chart\\[(\\d+)\\](?:/series\\[(\\d+)\\])?$\");\n        if (chartMatch.Success)\n        {\n            var chartIdx = int.Parse(chartMatch.Groups[1].Value);\n            var drawingsPart = worksheet.DrawingsPart;","sourceCodeStart":655,"sourceCodeEnd":691,"githubUrl":"https://github.com/iOfficeAI/OfficeCLI/blob/1ced45e900782c5083ed550ddf328ee974e425e7/src/officecli/Handlers/Excel/ExcelHandler.Query.cs#L655-L691","documentation":"Thrown for /Sheet/chart[N]/axis[@role=R] when the sheet has no DrawingsPart at all — i.e. no charts or drawings. The axis sub-path requires at least one chart to exist, so with zero charts the lookup is rejected up front rather than producing a confusing index error. Distinct from the index-out-of-range case (765) which fires when charts exist but N is too large.","triggerScenarios":"handler.Get(\"/Sheet1/chart[1]/axis[@role=primary]\") on a data-only sheet that contains no charts. Running an axis query against the wrong sheet.","commonSituations":"Agent/template assumes every sheet has charts. Sheet whose charts were deleted but the path wasn't updated. Querying a raw-data sheet for chart structure.","solutions":["Verify the sheet has charts before requesting an axis (enumerate the chart list first).","Point the axis query at a sheet known to contain charts.","Catch ArgumentException and treat 'No charts found in sheet' as an empty result."],"exampleFix":"// before\nvar axis = handler.Get(\"/Sheet1/chart[1]/axis[@role=primary]\"); // throws: no charts\n\n// after\ntry { var axis = handler.Get(\"/Sheet1/chart[1]/axis[@role=primary]\"); }\ncatch (ArgumentException ex) when (ex.Message.Contains(\"No charts\")) { /* no charts on sheet */ }","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { return handler.Get(\"/Sheet1/chart[1]/axis[@role=primary]\"); }\ncatch (ArgumentException ex) when (ex.Message.Contains(\"No charts\")) { /* sheet has no charts */ return null; }","preventionTips":["Verify a sheet has charts before issuing an axis sub-path.","Point axis queries at sheets known to contain charts.","Treat 'No charts found' as an empty result, not a fatal error."],"tags":["excel","charts","axis","drawings","argument-exception"],"backgroundTag":null,"analyzedSha":"1ced45e900782c5083ed550ddf328ee974e425e7","analyzedAt":"2026-08-13T13:01:07.193Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}