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

本文关键字:文件 创建 保存 EPPlus 提示 | 更新日期: 2023-09-27 18:14:30

我正在使用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文件以其最终形式输出?

这是一个问题的原因是因为我们使用SAS程序来QC,当SAS程序打开文件时,因为它们已经直接从EPPlus程序输出,它不会从其中有公式的单元格中获取值。如果打开它,并为"是否要保存更改"选择"yes",则工作正常。然而,由于我们正在创建数百个这样的程序,这是不实际的。

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

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

有别的办法吗?c#还是SAS ?

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

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

如果它是一个简单的数据表,那么很可能Excel不需要做太多的计算-只需基本的格式化。在这种情况下,它不会提示你保存。但即使这样做了,也会看到它对XLSX文件有一点改变。如果您真的想了解它在幕后做了什么,请将该文件重命名为.zip,并查看前后的xml文件。

你遇到的问题是因为它不仅仅是一个简单的表导出Excel必须运行计算时打开的第一次。这可以是很多东西-公式,自动过滤器,自动列/行高度调整,提纲等。基本上,在excel完成后,任何会使工作表看起来有点"不同"的东西。

不幸的是,没有简单的修复方法。以某种方式通过excel的DOM运行它将是最简单的,这当然违背了使用EPPlus的目的。你可以做的另一件事是看到之前和之后的xml文件之间的差异(有一堆在那里,你会看到)和模仿excel会改变/添加"之后"的文件版本通过手动编辑xml内容。这不是一个很好的选择,这取决于更改的范围有多大。您可以在这里看到我是如何在其他情况下这样做的:

使用EPPLUS创建透视表过滤器

在列上添加特定的自动过滤器

设置网格线颜色使用EPPlus?

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

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