【问题标题】:Prompted to Save Changes on file created with EPPlus提示保存使用 EPPlus 创建的文件的更改
【发布时间】:2016-08-05 23:14:49
【问题描述】:

我正在使用 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 程序输出的,它不会从具有公式的单元格中获取值在他们中。如果打开它并且为“是否要保存更改”选择“是”,它工作正常。但是,由于我们要创建数百个这样的模型,因此这是不切实际的。

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

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

有没有办法解决这个问题?在 C# 或 SAS 端?

【问题讨论】:

  • 您是否不小心关闭了 Excel 中的公式计算?您能否确认这是否也是另一台机器的问题?
  • 公式计算已打开,受保护的视图已禁用。我在两台不同的机器上试过。

标签: c# sas epplus


【解决方案1】:

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

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

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

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

Create Pivot Table Filters With EPPLUS

Adding a specific autofilter on a column

Set Gridline Color Using EPPlus?

【讨论】:

  • 谢谢。我认为这将是答案,但我希望有一个更直接的解决方法。我想我会把所有计算从 Excel 中移出,这样我们就不会破坏我们的 QC 系统。
  • @LisaMcCusker 当然。我忘了提到的另一个选择是 VBA。您可以将有问题的逻辑移动到一个宏,该宏在工作表首次在 Excel 中打开时触发,然后在没有 VBA 的情况下重新保存自身。也不是最干净的方法,但我想我会提到它。见这里:stackoverflow.com/questions/26734787/….
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多