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

ClosedXML生成的XLSX文件无法在MS Spreadsheet Compare中打开求助

解决ClosedXML生成的XLSX无法被MS Spreadsheet Compare打开的问题

我之前也碰到过一模一样的情况——用ClosedXML老版本生成的Excel文件能被Excel正常打开,但一放到Spreadsheet Compare里就报“Attempted to read past the end of the stream”错误,本质原因是Spreadsheet Compare对OpenXML规范的合规性要求比Excel严格得多,而旧版ClosedXML生成的文件缺少了一些OpenXML标准要求的必填部件/元数据,Excel的容错机制会自动补全这些内容,但Spreadsheet Compare不会。

问题根源

ClosedXML 0.92.1是比较旧的版本,它在生成基础工作簿时,可能遗漏了以下关键内容:

  • 默认的单元格样式部件(OpenXML规范要求工作簿必须包含基础样式定义)
  • 完整的文档元数据(比如LastModifiedBy、Subject等属性)
  • 某些OpenXML命名空间的完整声明

解决方案

1. 优先升级ClosedXML版本

这是最省心的办法,0.92.1之后的版本(比如0.102.x及以上的稳定版)修复了大量OpenXML合规性问题,升级后生成的文件大概率能直接被Spreadsheet Compare识别。

2. 若无法升级,手动补充缺失内容

如果暂时不能升级版本,可以在代码里强制添加必要的部件和属性,让生成的文件符合OpenXML规范:

using (var workbook = new XLWorkbook()) 
{
    // 设置完整的文档元数据,不要只加Author和Title
    workbook.Properties.Author = "Me";
    workbook.Properties.Title = "Title";
    workbook.Properties.Subject = "Auto-generated Spreadsheet";
    workbook.Properties.LastModifiedBy = "Me";
    workbook.Properties.Created = DateTime.Now;
    workbook.Properties.Modified = DateTime.Now;

    var worksheet = workbook.AddWorksheet("Sheet 1");
    worksheet.Row(1).Cell(1).SetValue("test");

    // 强制生成默认样式部件,这是老版本ClosedXML容易遗漏的
    var normalStyle = workbook.Styles.CreateNamedStyle("Normal");
    normalStyle.Font.FontName = "Calibri";
    normalStyle.Font.FontSize = 11;

    workbook.SaveAs(@"c:\temp\testing.xlsx");
}

验证方法

修改代码后生成文件:

  • 直接用Spreadsheet Compare打开测试,应该不会再报错
  • 可以用OpenXML SDK的OpenXmlValidator工具校验文件,确认合规性:
    using DocumentFormat.OpenXml.Packaging;
    using DocumentFormat.OpenXml.Validation;
    
    var validator = new OpenXmlValidator();
    using (var spreadsheetDocument = SpreadsheetDocument.Open(@"c:\temp\testing.xlsx", false))
    {
        var errors = validator.Validate(spreadsheetDocument);
        foreach (var error in errors)
        {
            Console.WriteLine($"Error: {error.Description}");
        }
    }
    

如果没有输出错误,说明文件已经符合OpenXML规范了。

内容的提问来源于stack exchange,提问作者NerdBrick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:23:55