按微软示例读取Excel,SharedString类型单元格获取不到SharedStringTablePart
我参照微软官方示例读取Excel文件的单元格值,当检测到cell.DataType.Value == CellValues.SharedString时,调用相关方法获取SharedStringTablePart却返回null,相关代码如下:
if (cell.DataType is not null) { if (cell.DataType.Value == CellValues.SharedString) { var stringTable = worksheetPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault(); if (stringTable is not null) {} else { throw new Exception("null"); } }
解决方法
核心错误是找错了SharedStringTablePart的所属层级:SharedStringTablePart是WorkbookPart的子部件,并非WorksheetPart的下属,用worksheetPart去获取肯定拿不到结果。
修改代码里的获取逻辑,改成从WorkbookPart实例中获取:
// 先确保已从SpreadsheetDocument中正确获取WorkbookPart实例 var workbookPart = spreadsheetDocument.WorkbookPart; var stringTable = workbookPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault();
额外注意:
- 必须保证WorkbookPart实例不为null,否则要先排查文档加载的问题
- 部分Excel文件可能未使用共享字符串(所有字符串直接存在单元格中),此时SharedStringTablePart确实会是null,建议不要直接抛异常,可兼容处理(比如直接取
cell.CellValue.Text作为备选)
内容的提问来源于stack exchange,提问作者Karmeye
相关产品推荐
相关产品推荐

