如何在C#中遍历Google Sheets API返回的嵌套数组?
代码问题与修复方案
你的代码存在两个关键问题:
- 内层循环边界错误:内层循环判断条件用了
sheetResponse.Values.Count(总行数),但实际应该用当前行的元素数量sheetResponse.Values[i].Count。用总行数当每行的元素数会导致索引越界,比如你的示例里总行数是2,但每行有3个元素,当j循环到2时就会超出当前行的索引范围。 - 冗余遍历:你只需要提取每行的第一个元素(Test1、Test2),没必要遍历所有单元格。
方案1:只提取每行第一个元素
如果目标只是获取Test1、Test2这类每行首列的值,直接访问每行索引0的元素即可:
var sheetRequest = sheetService.Spreadsheets.Values.Get(spreadsheetId, "A2:H"); var sheetResponse = await sheetRequest.ExecuteAsync(); // 遍历每一行 foreach (var row in sheetResponse.Values) { // 确保行不为空且有第一个元素 if (row.Count > 0) { // 避免强制转换出错,用ToString()更安全 string firstValue = row[0].ToString(); Console.WriteLine(firstValue); } }
方案2:正确遍历所有单元格(如果需要)
如果后续需要处理所有单元格,修正内层循环的边界条件即可:
var sheetRequest = sheetService.Spreadsheets.Values.Get(spreadsheetId, "A2:H"); var sheetResponse = await sheetRequest.ExecuteAsync(); for (int i = 0; i < sheetResponse.Values.Count; i++) { // 内层循环用当前行的元素数量,而非总行数 for (int j = 0; j < sheetResponse.Values[i].Count; j++) { string s = sheetResponse.Values[i][j].ToString(); Console.WriteLine(s); } }
额外注意事项
- Google Sheets API返回的
values中,空单元格不会被包含,所以某行的元素数量可能小于你请求的列数,建议每次访问元素前先判断行的长度,避免索引越界。 - 不要直接强制转换
(string),因为返回的元素可能是其他类型(比如数字),用ToString()兼容性更好。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

