使用公式

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


SpreadsheetML 中的公式

可使用公式来创建与计算相关的模型。 通过公式,可根据电子表格中和电子表格外的数据或电子表格中的其他已计算单元格的输出来自动计算值。

在工作表 XML 文件中,公式存储在使用公式的每个单元格中。 使用 CellFormula (<f>) 元素定义公式文本。 公式可包含包括大量预定义函数的数学表达式。

CellValue (<v>) 元素基于上次计算公式的时间存储缓存的公式值。 这样,用户便可在打开电子表格时延期计算公式值,从而在打开工作表时节省时间。 您无需指定值,并且如果您省略了值,则 Open XML 读者负责在打开工作表时根据公式定义来计算值。 有关 CellValue 类的详细信息,请参阅 CellValue

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

SpreadsheetML 公式是电子表格应用程序将一系列计算解析或解释为根据零到多输入计算一个值或一组值的函数的语法表示形式。

公式是可包含以下内容的表达式:常量、运算符、单元格引用、函数调用和名称。

示例:考虑公式 PI () * (A2^2) 。 在这种情况下,

  • PI() 会产生对函数 PI 的调用,并返回 π 的值。 - 单元格引用 A2 返回该单元格中的值。 - 2 是数值常量。 - 插入点 (^) 运算符将其左操作数提升为其右操作数的幂。 - 括号 ( 和 ) 用于分组。 - 星号 (*) 运算符对其两个操作数执行乘法运算。

运算符是指定要对一个或多个操作数执行的运算类型的符号。 包括算术、比较、文本和引用运算符。

工作表中的每组水平单元格为一行,每组垂直单元格为一列。 单元格的行和列组合指定该单元格的位置。

单元格引用指定同一工作表上的一个或多个单元格。 使用引用,可以: - 在单个公式中使用同一工作表的不同部分中包含的数据。 - 在多个公式中使用单个单元格中的值。 - 引用同一工作簿中其他工作表上的单元格,甚至引用其他工作簿。 (对其他工作簿中单元格的引用称为 links.)

函数是采用零或多个参数,执行运算并返回结果(可选)的命名公式。 以下是函数调用的一些示例:PI()、POWER(A1,B3) 和 SUM(C6:C10)。

此 Office Open XML 规范定义了 300 多个预定义函数。 还允许使用用户定义的函数。

名称是常量、单元格引用或公式的别名。 通过公式中的名称,更易于了解该公式的用途。 例如,公式 SUM(FirstQuarterSales) 比 SUM(C20:C30) 更容易识别。

每个表达式都具有一种类型。 SpreadsheetML 公式支持以下类型:数组、错误、逻辑、数字和文本。

数组值或常量表示一个或多个元素的集合,这些元素的值可为任意类型(即,数组的元素不必都为同一类型)。

© ISO/IEC29500: 2008.

有关公式语法的详细信息,请参阅 ISO/IEC 29500 规范。

SpreadsheetML 示例

此示例显示在 Sheet1 上的单元格 A6 中包含一个公式(SUM 函数)的文件的 XML。 以下 XML 定义工作表并包含在"sheet1.xml"文件中。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="https://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="https://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">
        <dimension ref="A1:A6"/>
        <sheetViews>
            <sheetView tabSelected="1" workbookViewId="0">
                <selection activeCell="A7" sqref="A7"/>
            </sheetView>
        </sheetViews>
        <sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"/>
        <sheetData>
            <row r="1" spans="1:1" x14ac:dyDescent="0.25">
                <c r="A1">
                    <v>1</v>
                </c>
            </row>
            <row r="2" spans="1:1" x14ac:dyDescent="0.25">
                <c r="A2">
                    <v>2</v>
                </c>
            </row>
            <row r="3" spans="1:1" x14ac:dyDescent="0.25">
                <c r="A3">
                    <v>3</v>
                </c>
            </row>
            <row r="4" spans="1:1" x14ac:dyDescent="0.25">
                <c r="A4">
                    <v>4</v>
                </c>
            </row>
            <row r="5" spans="1:1" x14ac:dyDescent="0.25">
                <c r="A5">
                    <v>5</v>
                </c>
            </row>
            <row r="6" spans="1:1" x14ac:dyDescent="0.25">
                <c r="A6">
                    <f>SUM(A1:A5)</f>
                    <v>15</v>
                </c>
            </row>
        </sheetData>
        <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
    </worksheet>