C#如何将Google Sheets API返回的IList对象转换为字符串
问题原因
你直接对
IList<IList<Object>>类型调用默认ToString()方法,只会返回集合的类型全限定名,不会遍历内部嵌套的元素输出单元格内容,因此无法拿到预期的单元格值。Google Sheets API返回的values结构为:外层列表对应工作表的行,内层列表对应单行里的每一列单元格值。
解决方案
针对当前获取单个单元格(A1)的场景
因为你请求的范围是单个单元格NET!A1,只要该单元格有值,直接取嵌套列表的第一层第一个元素即可,修复后的代码如下:
static string StringEntryRequest() { var range = "NET!A1"; var request = service.Spreadsheets.Values.Get(spreadsheetId, range); Console.WriteLine("Execute"); ValueRange response = request.Execute(); Console.WriteLine("Execute complete"); IList<IList<Object>> values = response.Values; // 先判空避免空引用异常 if (values != null && values.Count > 0 && values[0].Count > 0) { // 直接转字符串返回A1单元格内容 return values[0][0]?.ToString() ?? string.Empty; } // 无值时返回空字符串 return string.Empty; }
针对多单元格范围的通用字符串转换
如果后续你需要查询多行多列的范围,想把整个范围的内容转为格式化字符串,可以遍历嵌套列表拼接,示例如下:
// 自定义转换方法,可根据需求调整分隔符 static string ConvertValuesToString(IList<IList<object>> values) { if (values == null || values.Count == 0) return string.Empty; var rowStrList = new List<string>(); foreach (var row in values) { // 每行的单元格用英文逗号分隔,可自行替换为制表符等其他分隔符 rowStrList.Add(string.Join(",", row.Select(cell => cell?.ToString() ?? string.Empty))); } // 每行之间用换行分隔 return string.Join(Environment.NewLine, rowStrList); }
使用时直接调用ConvertValuesToString(values)即可拿到格式化后的所有单元格内容。
内容的提问来源于stack exchange,提问作者MemoryPatrick
相关产品推荐
相关产品推荐

