在.NET中使用Graph API v5.31从OneDrive获取Excel单元格值遇阻
.NET Graph API v5.31 获取OneDrive Excel行列/单元格值解决方案
核心问题在于Graph SDK v5采用按需请求字段的设计,默认不会返回Values、Text这类包含实际数据的属性,必须显式指定要获取的字段才能填充对应属性值。
修正后的代码示例
1. 获取已用区域(UsedRange)的数值
WorkbookRange usedRange = GraphClient.Drives[driveId].Items[itemId].Workbook.Worksheets[sheetName] .UsedRange .GetAsync(requestConfiguration => { // 指定需要返回的字段,按需添加 requestConfiguration.QueryParameters.Select = new string[] { "Values", "Text", "Address", "RowCount", "ColumnCount" }; }).Result; // 访问已用区域的所有值 var allValues = usedRange.Values;
2. 获取指定列范围的数值
WorkbookRange colRange = GraphClient.Drives[driveId].Items[itemId].Workbook.Worksheets[sheetName] .RangeWithAddress("NAME!A1:A79") .GetAsync(requestConfiguration => { requestConfiguration.QueryParameters.Select = new string[] { "Values" }; }).Result; // 遍历列值 foreach (var row in colRange.Values) { var cellValue = row[0]; // 单列的第一个元素就是当前行的单元格值 // 处理逻辑 }
3. 获取单个单元格的数值
WorkbookRange cell = GraphClient.Drives[driveId].Items[itemId].Workbook.Worksheets[sheetName] .CellWithRowWithColumn(2, 2) .GetAsync(requestConfiguration => { requestConfiguration.QueryParameters.Select = new string[] { "Values", "Text" }; }).Result; // 获取单元格值(注意Values是二维数组) var cellValue = cell.Values?[0][0]; var cellText = cell.Text?[0][0];
补充说明
- 如果需要公式、数字格式等其他属性,直接将对应的字段名(如
Formulas、NumberFormat)添加到Select数组中即可。 - 后续异步化重构时,务必用
await替代.Result,避免UI线程死锁问题。
内容的提问来源于stack exchange,提问作者Marcin
相关产品推荐
相关产品推荐

