使用计算链

本主题讨论 Open XML SDK CalculationChain 类及其与 Open XML 文件格式 SpreadsheetML 架构的关系。 有关构成 SpreadsheetML 文档的部件和元素的整体结构的详细信息,请参阅 SpreadsheetML 文档的结构

SpreadsheetML 中的 CalculationChain

ISO/IEC 29500 规范中的以下信息介绍了 CalculationChain (<calcChain>) 元素。

此部分类型的实例包含对从任何公式计算其值的工作簿中所有工作表的所有单元格的一组有序引用。 通过该顺序,在加载工作表以便使用时,便可按正确的顺序计算相关的单元格公式。

包中包含的计算链部分不应超过一个。

此内容类型的部分的根元素应为 calcChain。

计算链部件指定上次计算工作簿中的单元格的顺序。 它仅记录有关包含公式的单元格的信息。 它不包括有关公式依赖项计算树的任何信息。 换句话说,“计算链”部分不指示公式对其他单元格值具有的依赖关系;它仅指示上次计算单元格的顺序。

所有特定计算事件都可引起重新排列或更改计算链顺序。 例如,向工作簿添加更多公式会在计算链部分中添加引用。

如何更新计算顺序的另一个示例涉及部分计算的概念。 部分计算是一项优化,电子表格应用程序可实施以仅计算与其值发生更改的其他单元格相关的那些单元格,并且忽略工作簿中的其他公式。 这样可帮助避免已知的冗余重新计算结果。 因此,如果需要计算以前在计算期间忽略的一组公式(由于单元格的值发生变化),则这些公式会"先"移动到计算链,以便对其进行评估。

虽然电子表格应用程序可加载计算链信息,但并不需要这样做。 如果电子表格应用程序发现此信息有用,则可根据公式及其相关性,在加载时在内存中构造计算链。 计算链部分中表示的顺序不强制或规定按必须在运行时执行计算的顺序实施应用程序。

© ISO/IEC29500: 2008.

下表列出了使用 CalculationChain 类时使用的常见 Open XML SDK 类。

SpreadsheetML 元素 Open XML SDK 类
c CalculationCell

Open XML SDK CalculationChain 类

Open XML SDKCalculationChain 类表示在 SpreadsheetML 文档的 < Open XML 文件格式架构中定义的 calcChain>) 元素 (段落。 使用 CalculationChain 类可操作 SpreadsheetML 文档中的各个 <calcChain> 元素。

计算单元格类

CalculationCell 类表示单元格 (<si>) 元素,该元素表示包含公式的单元格。

ISO/IEC 29500 规范中的以下信息介绍了 CalculationCell (<c>) 元素。

每个 c 元素表示包含公式的单元格。 计算的第一个单元格先显示(从上到下),依次类推。 引用属性 r 指示工作表中的单元格的地址。 索引属性 i 指示该单元格关联的工作表的索引。

© ISO/IEC29500: 2008.

SpreadsheetML

ISO/IEC 29500 中的以下信息显示在应用程序执行其第一个完整计算后的示例计算链的 XML。

<calcChain xmlns="…">
    <c r="B2" i="1"/>
    <c r="B3" s="1"/>
    <c r="B4" s="1"/>
    <c r="B5" s="1"/>
    <c r="B6" s="1"/>
    <c r="B7" s="1"/>
    <c r="B8" s="1"/>
    <c r="B9" s="1"/>
    <c r="B10" s="1"/>
    <c r="C10" s="1"/>
    <c r="D10" s="1"/>
    <c r="A2"/>
    <c r="A3" s="1"/>
    <c r="A4" s="1"/>
    <c r="A5" s="1"/>
    <c r="A6" s="1"/>
    <c r="A7" s="1"/>
    <c r="A8" s="1"/>
    <c r="A9" s="1"/>
    <c r="A10" s="1"/>
</calcChain>