You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

  1. 用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
            }
        }
    }
    
  2. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:55:37