使用MS Graph SDK V5向SharePoint Excel表格添加数据遇Json类问题
核心问题分析
你遇到的问题根源在于SDK v5中WorkbookTableRow.Values的类型要求是IList<IList<Json>>,官方文档示例里的Number类属于错误用法(该类已被弃用或类型不匹配),直接替换为int、double等基础类型也无法匹配Json类型的约束,最终导致数据无法写入表格。
正确实现方法
1. 用Microsoft.Graph.Models.Json包装数据
Json类是SDK v5专门用于处理动态JSON值的封装类,所有单元格数据都需要用它来包装,示例代码如下:
using Microsoft.Graph.Models; // 构造要插入的行数据,每个值用Json类包装 var addReq = new WorkbookTableRow { Values = new List<List<Json>> { new List<Json> { new Json(1), // 整数类型 new Json("测试文本"), // 字符串类型 new Json(3.14) // 浮点数类型 }, new List<Json> { new Json(4), new Json("第二行数据"), new Json(6.78) } } }; // 执行添加行操作 await GraphClient.Drives[drive.Id].Items[excelFile.Id] .Workbook.Worksheets[sheetName] .Tables[table.Value[0].Id].Rows .PostAsync(addReq);
2. 替代方案:手动构造JSON请求体
如果不想依赖Json类,也可以绕过SDK的类型限制,直接构造原始JSON请求发送:
using System.Text.Json; // 构造原始数据结构 var rawData = new List<List<object>> { new List<object> { 1, "测试文本", 3.14 }, new List<object> { 4, "第二行数据", 6.78 } }; // 序列化为JSON字符串 var requestBody = JsonSerializer.Serialize(new { values = rawData }); // 发送POST请求 var response = await GraphClient.Drives[drive.Id].Items[excelFile.Id] .Workbook.Worksheets[sheetName] .Tables[table.Value[0].Id].Rows .PostAsync(requestBody, new RequestConfiguration { Headers = { { "Content-Type", "application/json" } } });
关于SDK版本的建议
- 若追求稳定的示例和更少的类型适配问题,降级到SDK v4是更简单的选择——v4中
WorkbookTableRow.Values直接支持IList<IList<object>>,无需额外的Json包装,官方示例也更准确。 - 若坚持使用v5,确保安装最新正式版而非预览版,部分预览版的类型定义存在未修复的bug。
内容的提问来源于stack exchange,提问作者Devon Bauman
相关产品推荐
相关产品推荐

