使用Sheets API V4写入谷歌表格时如何避免覆盖并写入新行?
解决C#写入谷歌表格重复覆盖单元格的问题
你的核心问题是每次都用Update方法固定写入A1:C1范围,自然会覆盖旧数据。要实现写入新行,最可靠的方式是使用谷歌Sheets API的Append请求,它会自动定位到表格的下一个空行插入数据,无需手动计算行数。
修改方案(推荐使用Append)
直接替换LogPlayer方法中的Update逻辑为Append:
public void LogPlayer(string patientName, string patientJson, string treatmentJson) { var valueRange = new Google.Apis.Sheets.v4.Data.ValueRange(); var objectList = new List<System.Object> { patientName, patientJson, treatmentJson }; valueRange.Values = new List<IList<object>> { objectList }; // 使用Append请求替代Update var appendRequest = sheetsService.Spreadsheets.Values.Append(valueRange, spreadsheetID, "Patients!A:C"); appendRequest.ValueInputOption = SpreadsheetsResource.ValuesResource.AppendRequest.ValueInputOptionEnum.USERENTERED; // 设置插入模式为插入新行,避免覆盖已有数据 appendRequest.InsertDataOption = SpreadsheetsResource.ValuesResource.AppendRequest.InsertDataOptionEnum.INSERTROWS; var appendResponse = appendRequest.Execute(); Debug.Log(appendResponse); }
关键说明:
- 范围指定为
Patients!A:C,让API识别要操作的列范围,自动找到下一个空行 InsertDataOptionEnum.INSERTROWS确保新数据插入新行,而非覆盖同一行的空白单元格- 相比手动计算行数,这种方式更稳定,能处理表格中存在空白行的情况
备选方案(手动计算行数用Update)
如果一定要用Update,需要先获取当前表格已有的数据行数,再定位到下一行:
public void LogPlayer(string patientName, string patientJson, string treatmentJson) { // 1. 获取当前表格已有数据的行数 var rangeRequest = sheetsService.Spreadsheets.Values.Get(spreadsheetID, "Patients!A:A"); var rangeResponse = rangeRequest.Execute(); int nextRow = rangeResponse.Values != null ? rangeResponse.Values.Count + 1 : 1; // 2. 构造新行的范围 string targetRange = $"Patients!A{nextRow}:C{nextRow}"; // 3. 执行Update写入新行 var valueRange = new Google.Apis.Sheets.v4.Data.ValueRange(); var objectList = new List<System.Object> { patientName, patientJson, treatmentJson }; valueRange.Values = new List<IList<object>> { objectList }; var updateRequest = sheetsService.Spreadsheets.Values.Update(valueRange, spreadsheetID, targetRange); updateRequest.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED; var updateResponse = updateRequest.Execute(); Debug.Log(updateResponse); }
注意事项:
- 确保你的服务账号已获得谷歌表格的编辑权限,表格需共享给服务账号邮箱
- 若表格中有合并单元格或格式异常,手动计算行数可能出错,优先推荐Append方案
内容的提问来源于stack exchange,提问作者MDA PatientMaster
相关产品推荐
相关产品推荐

