提示在使用EPPlus创建的文件上保存更改

我正在使用EPPlus v3.1.3创建一系列Excel工作簿。 当我打开新创建的文件时,如果我关闭它而不触及任何内容,它会询问我是否要保存更改。 我注意到的唯一变化是,如果我说“是”,则app.xml文件稍有改动 – 工作簿中没有明显的差异,其余的XML文件是相同的。 我尝试过这两种方法:

ExcelPackage p = new ExcelPackage(new FileInfo(filename)); p.Save(); 

以及

 ExcelPackage p = new ExcelPackage(); p.SaveAs(new FileInfo(filename)); 

两者都有同样的问题。 有没有办法让app.xml文件以最终forms输出?

这是一个问题的原因是因为我们使用SAS程序来进行QC,并且当SAS程序打开文件时,因为它们是直接从EPPlus程序输出的,所以它不从具有公式的单元格中获取值。 如果它被打开并且“是”你选择“是否要保存更改”,它可以正常工作。 但是,由于我们正在创造数百个,这是不切实际的。

另外,我正在使用模板。 模板显示正常。

特别奇怪的是,我们已经使用这个系统超过一年了,这是我们第一次遇到这个问题。

有没有办法解决? 在C#或SAS方面?

你所看到的实际上并不罕见。 Epplus实际上并不生成完整的XLSX文件 – 而是创建原始XML内容(所有Office 2007文档格式都是基于xml的)并将其放在重命名为XLSX的zip文件中。 由于它还没有通过Excel引擎运行,因此它没有完全格式化以擅长喜欢。

如果它是一个简单的数据表,那么Excel可能不需要做太多的计算 – 只需要基本的格式化。 因此,在这种情况下,它不会提示您保存。 但即便如此,如果你这样做,你会发现它稍微改变了XLSX文件。 如果你真的想看看它在幕后做了什么,请将文件重命名为.zip并查看之前和之后的xml文件。

您遇到的问题是因为它不仅仅是一个简单的表导出Excel第一次打开时必须运行计算。 这可能是很多东西 – 公式,自动filter,自动列/行高度调整,大纲等等。基本上,任何使得表格在excel完成之后看起来有点“不同”的东西。

不幸的是,没有简单的解决方法。 以某种方式通过excel的DOM运行它将是最简单的当然无法使用EPPlus的目的。 你可以做的另一件事是看到xml文件之前和之后的区别(并且你必须要看一堆)并模仿excel在“after”文件版本中更改/添加的内容手动编辑XML内容。 这不是一个非常漂亮的选项,具体取决于更改的范围。 您可以在此处查看我在其他情况下的操作方式:

使用EPPLUS创建数据透视表filter

在列上添加特定的自动filter

使用EPPlus设置网格线颜色?

我使用EPPlus(版本4.1.0,fyi)遇到了同样的问题,并发现在关闭之前添加以下代码修复了问题:

 p.Workbook.Calculate(); p.Workbook.FullCalcOnLoad = false;