升级至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
相关产品推荐
相关产品推荐

