1

我有一个 C# 数据库程序,并使用 EPPlus 生成一个带有一张表的 Excel 文件 (*.xlsx)。问题是至少某个版本的 Excel 在打开文档时不会重新计算公式。我正在为其他人开发该应用程序,下周可以告诉您显示问题的确切版本的 Excel。

我不打算展示我的完整代码,而是展示一个简单的例子来演示这个问题。我已经从这里复制了这个例子,并且稍微熟练了一点:EPPlus not calculating formula output after binding

这是代码:

        using (var pck = new OfficeOpenXml.ExcelPackage())
        {
            var ws = pck.Workbook.Worksheets.Add("MySheet");

            ws.Cells["A3"].Value = 2.3;
            ws.Cells["A4"].Value = 10.2;

            ws.Cells["A5"].Formula = "=SUM(A3:A4)";
            ws.Cells["A5"].Style.Numberformat.Format = "#,##0.00";

            ws.Workbook.CalcMode = ExcelCalcMode.Automatic;
            pck.SaveAs(new FileInfo(@"c:\users\richard\tmp1.xlsx"));
        }

该文档在 LibreOffice 中可以正常打开。它也在(未知的)Excel 版本中打开,但打开时不会重新计算公式。

我不愿意购买 MS Office 的许可证,所以我先下载了一个 Excel 查看器。ExcelViewer.exe,文件版本 12.0.4518.1071。此查看器显示相同的行为:未计算公式。

所以,我很不情愿地购买了 Office 365 家庭高级版,猜猜看:这个版本的 Excel 确实重新计算了公式。

我认为这是 Excel 版本中的错误,而不是 EPPlus 或我的代码中的错误。但是是否有任何解决方法可以强制所有版本的 Excel 重新计算公式?

是的,我已经尝试在这里阅读所有其他相关帖子,这不是重复的。

非常感谢。

4

1 回答 1

1

我不认为这可能是一个 Excel 错误,它是如此基本以至于每个人都会知道它。
生成 XL XML 文件不会计算公式。
在查看器中查看 Excel 文件不会计算公式。
将工作簿计算模式设置为自动并不一定意味着 Excel 将处于自动计算模式:
计算模式是从打开的第一个工作簿中获取的 Excel 会话实例设置,因此如果在打开工作簿时 Excel 处于手动模式,则不会计算。
(顺便说一句,我不知道您希望如何在无法测试的情况下成功创建 Excel 文件)

于 2013-11-01T08:08:52.710 回答