{"record":{"id":"b15ca6fdcb02dd39","repo":"iOfficeAI/OfficeCLI","slug":"unknown-part-type-parttype-supported-chart-c","errorCode":null,"errorMessage":"Unknown part type: {partType}. Supported: chart, chartex, drawing-group, ole","messagePattern":"Unknown part type: (.+?)\\. Supported: chart, chartex, drawing-group, ole","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/officecli/Handlers/Excel/ExcelHandler.Add.cs","lineNumber":1364,"sourceCode":"                var oleWsElement = GetSheet(oleWs);\n                var oleObjects = oleWsElement.GetFirstChild<OleObjects>();\n                if (oleObjects == null)\n                {\n                    oleObjects = new OleObjects();\n                    oleWsElement.AppendChild(oleObjects);\n                }\n                OpenXmlElement oleChild = oleObjectXml.Contains(\"AlternateContent\", StringComparison.Ordinal)\n                    ? new DocumentFormat.OpenXml.AlternateContent(oleObjectXml)\n                    : new OleObject(oleObjectXml);\n                oleObjects.AppendChild(oleChild);\n                ReorderWorksheetChildren(oleWsElement);\n                SaveWorksheet(oleWs);\n\n                return (oleRid, $\"/{oleSheetName}/ole\");\n            }\n\n            default:\n                throw new ArgumentException(\n                    $\"Unknown part type: {partType}. Supported: chart, chartex, drawing-group, ole\");\n        }\n    }\n\n    private static void RemapDrawingRelationshipId(\n        OpenXmlElement root, string sourceId, string destinationId)\n    {\n        const string relNs =\n            \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\";\n        foreach (var element in root.Descendants().Prepend(root))\n        {\n            foreach (var attr in element.GetAttributes()\n                .Where(a => a.NamespaceUri == relNs && a.Value == sourceId)\n                .ToList())\n            {\n                element.SetAttribute(new OpenXmlAttribute(\n                    attr.Prefix, attr.LocalName, attr.NamespaceUri, destinationId));\n            }","sourceCodeStart":1346,"sourceCodeEnd":1382,"githubUrl":"https://github.com/iOfficeAI/OfficeCLI/blob/1ced45e900782c5083ed550ddf328ee974e425e7/src/officecli/Handlers/Excel/ExcelHandler.Add.cs#L1346-L1382","documentation":"The switch over partType.ToLowerInvariant() in AddPart fell through to the default branch — the supplied part type is not one of the supported carriers: chart, chartex, drawing-group, ole. The message enumerates the valid values so the caller can correct the type.","triggerScenarios":"AddPart(parent, partType, ...) with a partType that is null (NullReferenceException aside, ToLowerInvariant would throw first), misspelled, differently cased-but-still-unknown, or a type that belongs to a different format (e.g. 'slide', 'smartart').","commonSituations":"Typo in the type string; passing a semantic element type (e.g. 'picture','shape') to AddPart instead of the Add path; using a pptx-specific part type on an xlsx file; stale documentation naming a removed type.","solutions":["Use one of: chart, chartex, drawing-group, ole.","For picture/shape/table/slicer/sparkline use the Add(...) element API, not AddPart.","Check the type spelling and casing (matching is case-insensitive but spelling must match).","Re-dump to see the exact partType labels the emitter uses."],"exampleFix":"// before\nhandler.AddPart(\"/Sheet1\", \"smartart\", props);\n// after — chartEx is the xlsx extended-chart carrier\nhandler.AddPart(\"/Sheet1\", \"chartex\", props);","handlingStrategy":"validation","validationCode":"var supported = new[]{ \"chart\", \"chartex\", \"drawing-group\", \"ole\" };\nif (!supported.Contains(partType?.ToLowerInvariant()))\n    throw new ArgumentOutOfRangeException(nameof(partType),\n        $\"'{partType}' is not a supported part type. Use one of: {string.Join(\", \", supported)}\");","typeGuard":"static bool IsSupportedPartType(string? t) =>\n    t?.ToLowerInvariant() is \"chart\" or \"chartex\" or \"drawing-group\" or \"ole\";","tryCatchPattern":"try { handler.AddPart(parent, partType, props); }\ncatch (ArgumentException ex) when (ex.Message.Contains(\"Unknown part type\"))\n{ /* switch to a supported carrier or to the Add element API */ }","preventionTips":["Use only chart/chartex/drawing-group/ole for AddPart.","For picture/shape/table/slicer/sparkline use the Add element API, not AddPart.","Re-dump to confirm the exact partType labels the emitter emits."],"tags":["excel","openxml","add-part","validation","part-type"],"backgroundTag":null,"analyzedSha":"1ced45e900782c5083ed550ddf328ee974e425e7","analyzedAt":"2026-08-13T13:01:07.193Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}