c# EPPlus 修改后关闭期间 Excel 提示保存

Posted

技术标签:

【中文标题】c# EPPlus 修改后关闭期间 Excel 提示保存【英文标题】:Excel prompts for save during closure following c# EPPlus modification 【发布时间】:2018-03-06 17:07:43 【问题描述】:

我有一个非常简单的 c# 应用程序,它使用 EPPlus 4.1.1 来修改一个简单的 excel 电子表格文件:

FileInfo fileInfo = new FileInfo(@"D:\file.xlsx");
ExcelPackage package = new ExcelPackage(fileInfo);
ExcelWorksheet workSheet = package.Workbook.Worksheets["Sheet1"];

    // mod logic

package.Save();

一切似乎都很顺利。一旦我的应用程序完成执行,我通过 Excel 从文件浏览器打开修改后的电子表格文件,以确认修改已正确执行。 问题是,一旦我尝试关闭 Excel,它会提示我保存。 现在,无论我保存还是不保存,修改仍然存在。然而 Excel 继续提示保存,直到我选择保存。我认为可能导致此问题的代码中缺少一两个步骤。有任何想法吗?谢谢!

【问题讨论】:

这是众所周知的行为 - 单元格中可能有表达式会在打开电子表格时导致重新计算 - 尽管您什么都不做,但仍会被标记为更改。有关更多信息,请参见此处:superuser.com/questions/464585/… 和/或 google 类似“没有更改时 Excel 提示保存” 【参考方案1】:

由于 EPPlus 创建 XML 文件的方式的性质,一些用户会遇到此问题。据我了解,EPPlus 创建的 Excel 文件在 Excel 眼中可能是不完整的,因此 Excel 的“保存”功能正在尝试“填充”底层 XML 的缺失部分。

根据我自己的经验,我发现有时在保存文件之前添加重新计算会使内容处于足够稳定的状态,Excel 不会尝试在简单的打开/查看/关闭循环中再次保存。

我也遇到过这样的情况,即我在 EPPlus 中的一些编辑创建了一个逻辑上不稳定的工作表,Excel 必须对其进行修复;大多数时候,这些都是我的逻辑错误,比如合并单元格,然后分组或隐藏某些部分。修复我的逻辑解决了这些错误。

我从遇到类似问题的Rÿck Nöthing 找到了this answer。就我个人而言,我会删除“FullCalcOnLoad”语句,因为您的需求可能与他的不同,并且您可能希望在加载时重新计算电子表格。

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

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

【讨论】:

感谢 Timeless 和 Peter-Pei-Guo 的反馈。

以上是关于c# EPPlus 修改后关闭期间 Excel 提示保存的主要内容,如果未能解决你的问题,请参考以下文章

.NET Core(C#) EPPlus读取Excel(.xlsx)文件的方法及示例代码

.NET Core(C#) EPPlus写入保存Excel(.xlsx)文件的方法及示例代码

.NET Core(C#) EPPlus创建Excel(.xlsx)写入数据的方法及示例代码

C# 使用Epplus导出数据到Excel

使用 Epplus 在 C# 中对 Excel 进行 SQL 查询

c#导出excel慢