Share via


Trabajar con fórmulas

En este tema se describe la clase CellFormula del SDK de Open XML y cómo se relaciona con el esquema SpreadsheetML de formato de archivo Open XML. Para obtener más información sobre la estructura general de las partes y elementos que forman un documento SpreadsheetML, vea Estructura de un documento SpreadsheetML (SDK de Open XML).


Fórmulas en SpreadsheetML

Puede usar fórmulas para crear modelos de cálculo. Las fórmulas permiten el cálculo automático de valores en función de datos que se encuentran dentro y fuera de la hoja de cálculo o del resultado de otras celdas calculadas de la hoja de cálculo.

Las fórmulas se almacenan dentro de cada celda que usa una fórmula, en el archivo XML de hoja de cálculo. Use el elemento CellFormula (<f>) para definir el texto de la fórmula. Las fórmulas pueden contener expresiones matemáticas que incluyen una amplia gama de funciones predefinidas.

El elemento CellValue (<v>) almacena el valor de la fórmula almacenada en caché en función de la última vez que se calculó la fórmula. Esto permite al usuario posponer el cálculo de los valores de la fórmula cuando se abre la hoja de cálculo, lo que ahorra tiempo al abrirla. No es necesario especificar el valor y, si lo omite, es responsabilidad del lector de Office Open XML calcular el valor basándose en la definición de la fórmula al abrir la hoja de cálculo. Para obtener más información sobre la clase CellValue , vea CellValue.

La siguiente información de la especificación ISO/IEC 29500 presenta el elemento cellFormula (<f>).

Una fórmula SpreadsheetML es la representación sintáctica de una serie de cálculos que la aplicación de hoja de cálculo analiza o interpreta en una función que calcula un valor o una matriz de valores basados en entradas de cero a varios.

Una fórmula es una expresión que puede contener lo siguiente: constantes, operadores, referencias de celda, llamadas a funciones y nombres.

Ejemplo: Considere la fórmula PI()*(A2^2). En este caso,

  • PI() produce una llamada a la función PI, que devuelve el valor de π. - La referencia de celda A2 devuelve el valor de esa celda. - 2 es una constante numérica. - El operador de intercalación (^) eleva su operando izquierdo a la potencia de su operando derecho. - Los paréntesis , ( y ), se usan para la agrupación. - El operador asterisco (*) realiza la multiplicación de sus dos operandos.

Un operador es un símbolo que especifica el tipo de operación que debe realizarse entre uno o varios operandos. Hay operadores aritméticos, de comparación, de texto y de referencia.

Cada conjunto de celdas horizontales de una hoja de cálculo es una fila y cada conjunto de celdas verticales es una columna. La combinación de la fila y la columna de una celda designa la ubicación de dicha celda.

Una referencia de celda designa una o varias celdas de la misma hoja de cálculo. Con referencias, se puede: usar datos contenidos en diferentes partes de la misma hoja de cálculo en una sola fórmula. - Use el valor de una sola celda en varias fórmulas. - Haga referencia a las celdas de otras hojas del mismo libro e incluso a otros libros. (Las referencias a celdas de otros libros se denominan vínculos).

Una función es una fórmula con nombre que puede tomar cero o varios argumentos, realiza una operación y, opcionalmente, devuelve un resultado. Algunos ejemplos de llamadas a función son: PI(), POWER(A1,B3) y SUM(C6:C10).

Esta especificación de Office Open XML define más de 300 funciones predefinidas. También se permiten las funciones definidas por el usuario.

Un nombre es un alias de una constante, una referencia de celda o una fórmula. Un nombre en una fórmula puede facilitar la comprensión del propósito de la fórmula. Por ejemplo, la fórmula SUM(VentasPrimerTrimestre) es más fácil de identificar que SUM(C20:C30).

Cada expresión tiene un tipo. Las fórmulas SpreadsheetML admiten los siguientes tipos: array, error, logical, number y text.

Una constante o valor matricial representa una colección de uno o varios elementos, cuyos valores pueden tener cualquier tipo (es decir, no es necesario que todos los elementos de una matriz tengan el mismo tipo).

© ISO/IEC29500: 2008.

Para obtener más información acerca de la sintaxis de fórmula, vea la especificación ISO/IEC 29500.

Ejemplo de SpreadsheetML

En este ejemplo se muestra el XML de un archivo que contiene una fórmula, la función SUM, en la celda A6 de la Hoja1. El siguiente XML define la hoja de cálculo y se incluye en el archivo "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>