Smartsheet SDK (2.0) API - 清除单元格
Smartsheet SDK (2.0) API - Clearing a cell
在白天的某个时间点,我需要通过 C# SDK(Nuget 包)
将 Smartsheet 上的数据重置(为 NULL)
这是原型代码片段
// Connect tp Smartsheet API
SmartsheetClient ss = new SmartsheetBuilder().SetAccessToken(myAccessToken).Build();
// Load in the Sheet
Sheet sheet = ss.SheetResources.GetSheet(mySheetID, null, null, null, null, null, null, null);
// Get the row/cell we want to update
Row dataRow = sheet.Rows[0];
Cell dataCell = dataRow.Cells[9];
UpdateRowBuilder rb = new Row.UpdateRowBuilder(dataRow.Id);
//
// SET THE VALUE OF THE CELL HERE
//
List<Cell> resetCells = new List<Cell>();
resetCells.Add(new Cell.UpdateCellBuilder(dataCell.ColumnId, null).Build());
// Save the Sheet
ss.SheetResources.RowResources.UpdateRows(mySheetID, new List<Row>() { rb.SetCells(resetCells).Build() });
如果我将单元格的值设置为(字符串)值,那么一切都很好,而且 sheet 保存,并且值出现
但是,如果我将该值设置为 NULL,则会出现异常...
Smartsheet.Api.InvalidRequestException: Required object attribute(s) are missing from your request: cell.value.
at Smartsheet.Api.Internal.AbstractResources.HandleError(HttpResponse response)
at Smartsheet.Api.Internal.AbstractResources.PutAndReceiveList[T,S](String path, T objectToPut, Type objectClassToReceive)
at Smartsheet.Api.Internal.SheetRowResourcesImpl.UpdateRows(Int64 sheetId, IEnumerable`1 rows)
at LHRMayfly.LHRMayFly_Processor.Reset() in C:\Projects\SmartSheetProcessor.cs:line 173
所以,底线问题是......如何删除单元格值?
快速回答:
只需设置一个空字符串作为单元格值。 UpdateCellBuilder(dataCell.ColumnId, String.Empty)
讨论:
Smartsheet 不区分不同类型的空单元格。所以发送 null 和空字符串在逻辑上没有区别。
底层 REST/JSON API 对缺失元素和显式 null 有不同的表示。用像 C# 这样的强类型语言来表示这两种情况更加困难。 (我愿意接受建议。)
在白天的某个时间点,我需要通过 C# SDK(Nuget 包)
将 Smartsheet 上的数据重置(为 NULL)这是原型代码片段
// Connect tp Smartsheet API
SmartsheetClient ss = new SmartsheetBuilder().SetAccessToken(myAccessToken).Build();
// Load in the Sheet
Sheet sheet = ss.SheetResources.GetSheet(mySheetID, null, null, null, null, null, null, null);
// Get the row/cell we want to update
Row dataRow = sheet.Rows[0];
Cell dataCell = dataRow.Cells[9];
UpdateRowBuilder rb = new Row.UpdateRowBuilder(dataRow.Id);
//
// SET THE VALUE OF THE CELL HERE
//
List<Cell> resetCells = new List<Cell>();
resetCells.Add(new Cell.UpdateCellBuilder(dataCell.ColumnId, null).Build());
// Save the Sheet
ss.SheetResources.RowResources.UpdateRows(mySheetID, new List<Row>() { rb.SetCells(resetCells).Build() });
如果我将单元格的值设置为(字符串)值,那么一切都很好,而且 sheet 保存,并且值出现
但是,如果我将该值设置为 NULL,则会出现异常...
Smartsheet.Api.InvalidRequestException: Required object attribute(s) are missing from your request: cell.value.
at Smartsheet.Api.Internal.AbstractResources.HandleError(HttpResponse response)
at Smartsheet.Api.Internal.AbstractResources.PutAndReceiveList[T,S](String path, T objectToPut, Type objectClassToReceive)
at Smartsheet.Api.Internal.SheetRowResourcesImpl.UpdateRows(Int64 sheetId, IEnumerable`1 rows)
at LHRMayfly.LHRMayFly_Processor.Reset() in C:\Projects\SmartSheetProcessor.cs:line 173
所以,底线问题是......如何删除单元格值?
快速回答:
只需设置一个空字符串作为单元格值。 UpdateCellBuilder(dataCell.ColumnId, String.Empty)
讨论:
Smartsheet 不区分不同类型的空单元格。所以发送 null 和空字符串在逻辑上没有区别。
底层 REST/JSON API 对缺失元素和显式 null 有不同的表示。用像 C# 这样的强类型语言来表示这两种情况更加困难。 (我愿意接受建议。)