提示保存使用EPPlus创建的文件更改
我使用EPPlus v3.1.3创建一系列Excel工作簿。当我打开新创建的文件时,如果我关闭它而没有触及任何内容,它会询问我是否要保存更改。我注意到的唯一一件事情是,如果我说“是”,app.xml文件会稍微改变 - 工作簿中没有可见的区别,其余的XML文件是相同的。我曾尝试这两种方法:提示保存使用EPPlus创建的文件更改
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方面?
你所看到的其实并不罕见。 Epplus实际上并不生成完整的XLSX文件,而是创建原始XML内容(所有Office 2007文档格式都是基于xml的),并将其放入重命名为XLSX的zip文件中。由于它没有通过Excel引擎运行,因此它没有完全格式化以满足喜好。
如果它是一个简单的数据表,那么Excel可能不需要做太多的计算 - 只是基本的格式。所以在这种情况下,它不会提示你保存。但即使如此,如果你这样做,你会看到它稍微改变了XLSX文件。如果你真的想看看它在幕后做了什么,请将文件重命名为.zip,然后查看之前和之后的xml文件。
您正在运行的问题是因为它不仅仅是一个简单的表格导出Excel必须在第一次打开时运行计算。这可能是许多事情 - 公式,自动过滤器,自动列/行高度限定,大纲等。基本上,任何会使Excel在完成Excel后看起来有点“不同”的东西。
不幸的是,这并不容易。以某种方式通过excel的DOM运行它会是最简单的,这当然会损害使用EPPlus的目的。你可以做的另一件事是看到xml文件之前和之后的区别(并且有一堆你必须看看),并且模仿excel在“after”文件版本中改变/添加的区别手动编辑XML内容。这不是一个非常漂亮的选择,具体取决于改变的范围。你可以看到我是如何在这里其他情况下做到了:
Create Pivot Table Filters With EPPLUS
谢谢。我想这将是答案,但我希望有一个更直接的解决方法。我想我只是将所有的计算都从Excel中移出来,所以我们不会弹出我们的QC系统。 – yammerade
@LisaMcCusker当然。我忘记提及的另一个选择是VBA。您可以将违规逻辑移动到一个宏,该宏在Excel首次打开时激活,然后在没有VBA的情况下重新进行自我调整。也不是最干净的方式,但想到我会提到它。看到这里:http://stackoverflow.com/questions/26734787/epplus-pivot-table-copy-values-to-new-sheet/26736549#26736549。 – Ernie
我使用EPPlus(4.1版本就遇到了这个同样的问题。0,fyi)并发现在关闭前添加下面的代码修复了问题:
p.Workbook.Calculate();
p.Workbook.FullCalcOnLoad = false;
您是否意外关闭了Excel中的公式计算?你能否确认这是否是来自不同机器的问题? –
公式计算已启用且受保护的视图已禁用。我试过两种不同的机器。 – yammerade