.NET Core7中如何将ByteArray转换为XLS文件并处理?
在.NET Core 7中读取XLS格式文件的解决方案
针对你遇到的XLS文件读取问题,推荐以下两个无需依赖Office组件的纯.NET库方案:
方案一:使用NPOI库
NPOI对旧版BIFF格式的XLS文件支持完善,且完全适配.NET Core环境。
- 先安装NuGet包:
NPOI(该包已包含处理XLS的HSSF模块) - 读取示例代码:
using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using (MemoryStream memStream = new MemoryStream(byteArray)) { // 初始化XLS工作簿 IWorkbook workbook = new HSSFWorkbook(memStream); // 获取第一个工作表(可根据需求指定索引或名称) ISheet targetSheet = workbook.GetSheetAt(0); // 遍历行处理数据 for (int rowIndex = targetSheet.FirstRowNum; rowIndex <= targetSheet.LastRowNum; rowIndex++) { IRow row = targetSheet.GetRow(rowIndex); if (row == null) continue; // 遍历单元格提取数据 for (int cellIndex = row.FirstCellNum; cellIndex < row.LastCellNum; cellIndex++) { ICell cell = row.GetCell(cellIndex); string cellContent = cell?.ToString() ?? string.Empty; // 这里添加你的数据处理逻辑 } } }
方案二:使用ExcelDataReader库
ExcelDataReader同时支持XLS和XLSX格式,API更贴近ADO.NET的DataSet模式,上手成本低。
- 安装NuGet包:
ExcelDataReader和ExcelDataReader.DataSet - 读取示例代码:
using ExcelDataReader; using System.Data; // .NET Core环境需注册编码提供器,否则读取XLS会报错 System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); using (MemoryStream memStream = new MemoryStream(byteArray)) { // 创建XLS格式的读取器 using (IExcelDataReader reader = ExcelReaderFactory.CreateBinaryReader(memStream)) { // 配置读取规则(比如是否将第一行作为表头) DataSet dataSet = reader.AsDataSet(new ExcelDataSetConfiguration() { ConfigureDataTable = (_) => new ExcelDataTableConfiguration() { UseHeaderRow = true } }); // 获取第一个工作表的数据表 DataTable dataTable = dataSet.Tables[0]; // 遍历行处理数据 foreach (DataRow row in dataTable.Rows) { // 根据列名提取数据,示例:row["你的表头名称"] string value = row["列名"]?.ToString() ?? string.Empty; // 数据处理逻辑 } } }
额外说明
- 这两个库都是跨平台的纯.NET实现,不需要在服务器上安装Office,适合.NET Core的部署场景;
- 如果后续提供方切换为XLSX格式,只需少量修改代码即可兼容(NPOI用XSSFWorkbook,ExcelDataReader用CreateOpenXmlReader)。
内容的提问来源于stack exchange,提问作者Beengie
相关产品推荐
相关产品推荐

