C#使用Google SheetsService时如何正确获取SheetID
解决方案
你可以通过拉取电子表格元数据的方式动态获取对应工作表的ID,无需硬编码:
1. 新增获取工作表ID的方法
/// <summary> /// 获取电子表格中第一个工作表的SheetID /// </summary> /// <param name="spreadsheetId">电子表格ID</param> /// <returns>工作表ID</returns> public int GetFirstWorksheetId(string spreadsheetId) { var getSpreadsheetRequest = serviceSheet.Spreadsheets.Get(spreadsheetId); // 指定仅返回工作表ID相关字段,减少请求开销 getSpreadsheetRequest.Fields = "sheets.properties.sheetId"; var spreadsheet = getSpreadsheetRequest.Execute(); // 直接取第一个工作表的ID return spreadsheet.Sheets.First().Properties.SheetId.Value; }
如果需要根据工作表名称筛选,可以使用如下逻辑:
public int GetWorksheetIdByName(string spreadsheetId, string sheetName) { var getSpreadsheetRequest = serviceSheet.Spreadsheets.Get(spreadsheetId); getSpreadsheetRequest.Fields = "sheets.properties(sheetId,title)"; var spreadsheet = getSpreadsheetRequest.Execute(); return spreadsheet.Sheets .First(s => s.Properties.Title == sheetName) .Properties.SheetId.Value; }
2. 修改原有删除列方法
将硬编码的SheetId = 0替换为上述方法返回的ID即可:
public void DeleteColumns(string spreadsheetId, int start, int end) { // 动态获取第一个工作表ID int sheetId = GetFirstWorksheetId(spreadsheetId); Request requestBody = new Request() { DeleteDimension = new DeleteDimensionRequest() { Range = new DimensionRange() { SheetId = sheetId, Dimension = "COLUMNS", StartIndex = start, EndIndex = end } } }; List<Request> requestContainer = new List<Request>(); requestContainer.Add(requestBody); BatchUpdateSpreadsheetRequest deleteRequest = new BatchUpdateSpreadsheetRequest(); deleteRequest.Requests = requestContainer; SpreadsheetsResource.BatchUpdateRequest deletion = new SpreadsheetsResource.BatchUpdateRequest(serviceSheet, deleteRequest, spreadsheetId); deletion.Execute(); }
注意事项
- 可以根据业务场景选择按序号或者按工作表名称获取ID,按名称获取的兼容性更强,不会因为工作表顺序调整导致功能异常
- 建议对获取工作表的逻辑添加异常捕获,避免电子表格无工作表、指定名称的工作表不存在等场景下抛出未处理的异常
内容的提问来源于stack exchange,提问作者Kirill Lachaev
相关产品推荐
相关产品推荐

