You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级至Microsoft Graph .NET SDK v5后,Excel WorkbookRange数据始终为空

解决Microsoft Graph .NET SDK v5读取Excel工作表数据的问题

Microsoft Graph .NET SDK v5采用了选择性加载机制,默认不会返回WorkbookRange的Text、Values等数据属性,这就是你获取到对象但属性为空的原因。必须显式指定要加载的属性才能拿到数据,同时v5已简化了数据反序列化流程,无需手动调用Deserialize。

获取指定范围的文本数据

使用GetAsync时通过requestConfiguration指定要加载text属性:

WorkbookRange? range = await client
    .Drives["Me"].Items[bookId]
    .Workbook.Worksheets[tabId]
    .RangeWithAddress("A1:XX1")
    .GetAsync(requestConfiguration => 
    {
        requestConfiguration.QueryParameters.Select = new[] { "text" };
    }, cancellationToken: cancellation)
    .ConfigureAwait(false);

// 直接获取强类型的文本数据,无需手动反序列化
var data = range.Text; // 类型为 List<List<string>>

获取已使用区域的数据

针对UsedRangeWithValuesOnly,同样需要指定要加载的属性(比如values或text):

WorkbookRange? used = await client
    .Drives["Me"].Items[bookId]
    .Workbook.Worksheets[tabId]
    .UsedRangeWithValuesOnly(true)
    .GetAsync(requestConfiguration => 
    {
        requestConfiguration.QueryParameters.Select = new[] { "values" };
    }, cancellationToken: cancellation)
    .ConfigureAwait(false);

// Values属性返回object[][],可按需转换为List<List<string>>
var usedData = used.Values?.Select(row => row.Select(item => item?.ToString() ?? string.Empty).ToList()).ToList();

额外说明

  • 若需要获取单元格的原始值(如数字、布尔值),优先使用Values属性;仅需文本内容时用Text属性。
  • v5中Text属性已自动反序列化为List<List<string>>,无需再调用Deserialize方法。

内容的提问来源于stack exchange,提问作者Stephan Hoffmann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 07:32:15