0

据我了解,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 工作表中。虽然我找到了一些如何触发重新计算以及如何添加打开事件侦听器的示例。

4

3 回答 3

1

最简单的方法是从单元格中删除计算值(如您提供的链接中所述)。

您不必知道工作表的确切结构。只需删除 worksheets/sheet1.xml 中所有出现的<v>#VALUE!</v>(这样其他功能就不会受到影响)。

于 2012-03-29T18:50:18.867 回答
0

按 F9 重新计算所有打开的工作簿 Excel 重新计算

于 2012-03-16T11:20:16.133 回答
0

也许您的工作簿计算模式设置为手动。当您打开工作簿时,通过在代码中将其设置为 null 来强制此模式为自动,如下所示:

    public  void SetAutomaticCalculationMode(WorkbookPart workbookPart1)
    {
        Workbook workbook1 = workbookPart1.Workbook;

        CalculationProperties calculationProperties1=workbook1.GetFirstChild<CalculationProperties>();
        calculationProperties1.CalculationMode = null;
    }

这将对应于 Excel 2007 客户端选项中的自动计算模式: 在此处输入图像描述

于 2012-03-16T14:01:06.653 回答