据我所知,Microsoft Office Excel中包含公式的单元格在序列化并以Office Open XML格式(特别是SpreadsheetML)保存时可以包含计算值。这很可能适用于其他类型的依赖项和来自其他单元格的值的函数(如图表,数据透视表等)。我很可能做错了,但是当通过外部工具处理这个XML文档(SpreadsheetML)时,不使用MS提供的任何.Net组件或类似API,只是直接操作XML,我遇到了一个问题,当我修改其中一个工作表Excel的某些内容仍将使用包含公式的单元格中的最后生成的值。因此,当用户打开生成的电子表格时,他会看到已修改的数据,但所有计算的字段都已过时。现在,我能在互联网上找到的唯一一件事就是:
http://openxmldeveloper.org/discussions/formats/f/14/p/1561/4164.aspx
这实际上不是一个更好的解决方案,特别是如果它适用于任何类型的计算单元格和对象(图表等),因为它意味着当您不完全知道所有工作表的结构时,部分重新实现某些SpreadsheetML处理器。
我希望Excel中的选项或其中一个SpreadsheetML部分中的配置肯定会强制重新计算或将单元格标记为脏,但我还找不到。
有一种假设认为脚本有用,但我对该领域缺乏了解并没有带来任何成功的结果,因为我不确定如何将脚本包含在SpreadsheetML工作表中。虽然我找到了一些如何触发重新计算以及如何添加开放事件监听器的示例。
答案 0 :(得分:1)
最简单的方法是从单元格中删除计算出的值(如您提供的链接中所述)。
您不必知道工作表的确切结构。只需删除工作表/ sheet1.xml中出现的所有<v>#VALUE!</v>
(以便其他功能不受影响)。
答案 1 :(得分:0)
按F9重新计算所有打开的工作簿 Excel Recalculation
答案 2 :(得分:0)
也许您的工作簿计算模式已设置为手动。通过在代码中将其设置为null并使用以下命令打开工作簿时,将此模式强制为自动:
public void SetAutomaticCalculationMode(WorkbookPart workbookPart1)
{
Workbook workbook1 = workbookPart1.Workbook;
CalculationProperties calculationProperties1=workbook1.GetFirstChild<CalculationProperties>();
calculationProperties1.CalculationMode = null;
}
这将对应于Excel 2007客户端选项中显示的自动计算模式: