使用ExcelDataReader打开.xlsb文件报无法打开zip文件,求解决方案
问题解决:ExcelDataReader打开XLSB报错及XLSB转XLS免费方案
一、修复ExcelDataReader打开XLSB时“无法打开zip文件”的错误
官方文档标注支持XLSB但实际报错,通常是以下原因导致,对应解决方案如下:
确认依赖包完整性
确保已安装ExcelDataReader和ExcelDataReader.DataSet两个NuGet包,且版本保持一致(建议使用最新稳定版)。旧版本的ExcelDataReader对XLSB的自动识别存在兼容问题。手动指定文件类型,跳过自动检测
自动检测逻辑可能误判XLSB格式,手动指定文件类型可避免该问题,修改代码如下:using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read)) { var config = new ExcelReaderConfiguration { FileType = ExcelFileType.Xlsb }; using (var reader = ExcelReaderFactory.CreateReader(stream, config)) { // 后续读取逻辑保持不变 var result = reader.AsDataSet(); } }排查文件本身问题
确认XLSB文件未损坏,可尝试用Excel手动打开验证;同时确保文件未被其他进程占用,导致流读取异常。
二、免费XLSB转XLS的实现方案
目前没有直接一键转换的单一免费库,可通过两个开源库组合实现:
方案:EPPlus + NPOI
用EPPlus读取XLSB数据
EPPlus 5及以上版本支持读写XLSB文件,通过NuGet安装EPPlus包后,读取XLSB内容:using (var package = new ExcelPackage(new FileInfo("input.xlsb"))) { var worksheet = package.Workbook.Worksheets.First(); // 读取单元格数据,比如遍历行和列 for (int row = 1; row <= worksheet.Dimension.End.Row; row++) { for (int col = 1; col <= worksheet.Dimension.End.Column; col++) { var cellValue = worksheet.Cells[row, col].Value; // 暂存数据或直接写入NPOI } } }用NPOI生成XLS文件
NPOI是免费的.NET Excel操作库,支持生成旧版XLS格式,安装NPOI和NPOI.OpenXmlFormats包后,将读取到的数据写入XLS:var workbook = new HSSFWorkbook(); var sheet = workbook.CreateSheet("Sheet1"); // 假设已从EPPlus读取到dataList集合,逐行写入 int rowIndex = 0; foreach (var rowData in dataList) { var row = sheet.CreateRow(rowIndex++); int colIndex = 0; foreach (var cellValue in rowData) { row.CreateCell(colIndex++).SetCellValue(cellValue?.ToString() ?? string.Empty); } } // 保存为XLS文件 using (var stream = new FileStream("output.xls", FileMode.Create)) { workbook.Write(stream); }
备选方案:Microsoft.Office.Interop.Excel
如果运行环境已安装Microsoft Office,可直接用Interop组件实现转换,代码示例:
var excelApp = new Microsoft.Office.Interop.Excel.Application(); var workbook = excelApp.Workbooks.Open("input.xlsb"); workbook.SaveAs("output.xls", Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel8); workbook.Close(); excelApp.Quit();
注意:该方案依赖Office安装,不适合无Office的服务器环境。
内容的提问来源于stack exchange,提问作者Loc Dai Le
相关产品推荐
相关产品推荐

