Smartsheet API无法保存:更新花名册表格调用UpdateSheet报错求助
解决Smartsheet API UpdateSheet时的InvalidRequestException错误
问题出在你直接将GetSheet获取的完整Sheet对象传入UpdateSheet接口——这个接口仅支持修改Sheet的基础属性(如名称、描述),不允许传递rows、columns等大量元数据字段,这就是报错的核心原因。正确的做法是使用Smartsheet API专门的行操作接口完成清空旧行、添加新行的逻辑:
修正后的代码
// 1. 获取Sheet并构建列映射 Sheet roster = ssc.SheetResources.GetSheet(SomeSheeNumberGoesHere, null, null, null, null, null, null, null); Dictionary<string, long> columnMap = new Dictionary<string, long>(); foreach (Column column in roster.Columns) columnMap.Add(column.Title, (long)column.Id); // 2. 批量删除所有现有行 List<long> rowIdsToDelete = roster.Rows.Select(row => (long)row.Id).ToList(); if (rowIdsToDelete.Count > 0) { ssc.SheetResources.RowResources.DeleteRows(roster.Id, rowIdsToDelete, true); } // 3. 批量构建新行并添加 List<Row> newRows = new List<Row>(); foreach (EmployeeData emp in oEmploys) { var newCells = new List<Cell>(); newCells.Add(new Cell() { ColumnId = columnMap["WFM_ID"], Value = emp.WFM_ID }); newCells.Add(new Cell() { ColumnId = columnMap["Email"], Value = emp.Email }); newCells.Add(new Cell() { ColumnId = columnMap["Employee"], Value = emp.Employee }); newCells.Add(new Cell() { ColumnId = columnMap["Supervisor"], Value = emp.Supervisor }); newCells.Add(new Cell() { ColumnId = columnMap["FirstName"], Value = emp.FirstName }); newCells.Add(new Cell() { ColumnId = columnMap["LastName"], Value = emp.LastName }); newCells.Add(new Cell() { ColumnId = columnMap["Tier"], Value = emp.Tier }); newCells.Add(new Cell() { ColumnId = columnMap["Title"], Value = emp.Title }); Row trow = new Row() { Cells = newCells }; newRows.Add(trow); } if (newRows.Count > 0) { ssc.SheetResources.RowResources.AddRows(roster.Id, newRows); }
关键说明
- 删除行:用
RowResources.DeleteRows批量删除所有现有行,第三个参数ignoreRowsNotFound设为true可避免因行已被删除导致的报错。 - 添加行:用
RowResources.AddRows批量添加新行,这是Smartsheet API推荐的批量操作方式,比逐行添加效率更高。 - 避免误用UpdateSheet:
UpdateSheet仅用于修改Sheet的顶层属性(如Name、Description),不能用来操作行数据。
内容的提问来源于stack exchange,提问作者Guy Cothal
相关产品推荐
相关产品推荐

