You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

导出Excel文件时遇XML错误:sheet1.xml列信息被移除

解决EPPlus导出Excel提示"Removed Records: Column information from /xl/worksheets/sheet1.xml part"的问题

这个错误我之前帮好几个开发者排查过,本质是EPPlus生成的工作表XML里,列的定义不符合Excel的规范,导致Excel加载时不得不修复这些错误。结合你的代码,重点从这几个方向排查:

  • 检查列宽的设置是否合规
    大概率是你的HeaderOfExcel方法里设置列宽时出了问题:Excel允许的列宽范围是0到255,如果设置了超出这个范围的值,或者重复给同一列设置宽度(比如循环里重复处理了某一列),就会导致XML里的列定义出错。
    比如把代码里类似excelWorksheet.Column(i).Width = 300;的数值改成255以内,同时确保每一列只设置一次宽度。

  • 验证单元格数据类型与格式匹配
    如果往单元格里写入的数据类型和你设置的单元格格式不匹配,也可能触发这个错误。比如:

    • 把字符串类型的内容强行设置为数值格式
    • 日期格式设置错误(比如用了Excel不识别的日期字符串)
      建议明确指定单元格的值类型,比如:
    // 正确示例:写入数值
    excelWorksheet.Cells[row, col].Value = Convert.ToInt32(yourData);
    // 正确示例:写入日期
    excelWorksheet.Cells[row, col].Value = DateTime.Parse(yourDateString);
    excelWorksheet.Cells[row, col].Style.Numberformat.Format = "yyyy-MM-dd";
    
  • 升级EPPlus到稳定版本
    旧版本的EPPlus(比如4.x的某些早期版本)存在XML生成的bug,尤其是在处理列定义和样式的时候。如果你的项目用的是老版本,建议升级到最新的稳定版(注意EPPlus 5及以上版本针对商业用途需要授权,非商业场景可以选择LGPL许可的版本)。

  • 排查HeaderOfExcel方法的重复操作
    检查这个方法里有没有重复对同一列进行操作,比如多次设置列的样式、自动筛选,或者重复添加列的定义。比如如果循环里多次调用excelWorksheet.Columns.AutoFit(),也可能导致列定义冲突。

  • 临时排查:解压XLSX文件查看XML
    如果还是找不到问题,可以把导出的.xlsx文件重命名为.zip,解压后打开xl/worksheets/sheet1.xml,找到<cols>节点,检查里面的列是否有重复的col节点、无效的width值,或者min/max属性设置错误(比如min大于max)。

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

火山引擎 最新活动