{"record":{"id":"380407ab1fbdb90d","repo":"iOfficeAI/OfficeCLI","slug":"sheet-not-found-runsheetname","errorCode":null,"errorMessage":"Sheet not found: {runSheetName}","messagePattern":"Sheet not found: (.+?)","errorType":"validation","errorClass":"System.ArgumentException","httpStatus":null,"severity":"error","filePath":"src/officecli/Handlers/Excel/ExcelHandler.Add.Cells.cs","lineNumber":1207,"sourceCode":"            if (existingCol == null)\n                columns.AppendChild(newCol);\n        }\n\n        SaveWorksheet(colWorksheet);\n        return $\"/{colSheetName}/col[{insertColName}]\";\n    }\n\n    private string AddRun(string parentPath, string type, InsertPosition? position, Dictionary<string, string> properties)\n    {\n        var index = position?.Index;\n        // Add a rich text run to a cell: parentPath = /SheetName/CellRef\n        var runSegments = parentPath.TrimStart('/').Split('/', 2);\n        if (runSegments.Length < 2)\n            throw new ArgumentException(\"Parent path must be /SheetName/CellRef for adding a run\");\n        var runSheetName = runSegments[0];\n        var runCellRef = runSegments[1].ToUpperInvariant();\n        var runWorksheet = FindWorksheet(runSheetName)\n            ?? throw new ArgumentException($\"Sheet not found: {runSheetName}\");\n        var runSheetData = GetSheet(runWorksheet).GetFirstChild<SheetData>()\n            ?? GetSheet(runWorksheet).AppendChild(new SheetData());\n        var runCell = FindOrCreateCell(runSheetData, runCellRef);\n\n        var runWbPart = _doc.WorkbookPart\n            ?? throw new InvalidOperationException(\"Workbook not found\");\n        var runSstPart = runWbPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault()\n            ?? runWbPart.AddNewPart<SharedStringTablePart>();\n        SharedStringTable runSst;\n        if (runSstPart.SharedStringTable != null)\n            runSst = runSstPart.SharedStringTable;\n        else\n        {\n            runSst = new SharedStringTable();\n            runSstPart.SharedStringTable = runSst;\n        }\n\n        SharedStringItem? runSsi = null;","sourceCodeStart":1189,"sourceCodeEnd":1225,"githubUrl":"https://github.com/iOfficeAI/OfficeCLI/blob/1ced45e900782c5083ed550ddf328ee974e425e7/src/officecli/Handlers/Excel/ExcelHandler.Add.Cells.cs#L1189-L1225","documentation":"Thrown by AddRun when FindWorksheet(runSheetName) returns null, meaning no worksheet in the workbook matches the sheet segment extracted from the parentPath. FindWorksheet performs a name lookup against the workbook's sheet collection. This fires after the path-format check (482) passes, so the path had two segments but the first did not resolve to a real sheet.","triggerScenarios":"AddRun with parentPath=\"/Nonexistent/A1\". A typo in the sheet name, a sheet that was deleted, or a hidden/very-hidden sheet whose name differs. Case is handled by FindWorksheet's comparison in most paths, so this is a genuine name mismatch.","commonSituations":"Sheet was renamed or deleted between dump and add. Script uses a sheet name from a template that does not exist in the target workbook. Trailing whitespace or a copy-paste artifact in the sheet name.","solutions":["List sheets first (Get on /) and copy the exact sheet name into the path.","Create the sheet with Add type=sheet before adding runs to its cells.","Strip leading/trailing whitespace and verify the spelling of the sheet segment."],"exampleFix":"// before\nhandler.Add(\"/Sheet1/A1\", \"run\", pos, props); // Sheet1 does not exist\n\n// after\nhandler.Add(\"/\", \"sheet\", null, new() { [\"name\"] = \"Sheet1\" });\nhandler.Add(\"/Sheet1/A1\", \"run\", pos, props);","handlingStrategy":"validation","validationCode":"string sheet = \"Sheet1\";\n// Verify via the library's read API before adding a run.\nvar sheets = handler.Query(\"/\"); // or Get listing sheets\nif (!sheets.Any(s => string.Equals(s.Name, sheet, StringComparison.OrdinalIgnoreCase)))\n    throw new InvalidOperationException($\"Sheet not found: {sheet}\");\nhandler.Add(\"/\" + sheet + \"/A1\", \"run\", pos, props);","typeGuard":"static bool SheetExists(IExcelHandler h, string sheet)\n    => h.Query(\"/\").Any(s => string.Equals(s.Name, sheet, StringComparison.OrdinalIgnoreCase));","tryCatchPattern":"try { handler.Add(parentPath, \"run\", pos, props); }\ncatch (ArgumentException ex) when (ex.Message.StartsWith(\"Sheet not found\"))\n{ /* create sheet or report missing sheet to caller */ }","preventionTips":["Cache the sheet list at the start of a script and reference names from it.","Create sheets before adding runs to their cells.","Trim whitespace from sheet names captured from user input or dumps."],"tags":["excel","ooxml","add-run","sheet-not-found","argument"],"backgroundTag":null,"analyzedSha":"1ced45e900782c5083ed550ddf328ee974e425e7","analyzedAt":"2026-08-13T13:01:07.193Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}