Share via


Trabajar con la cadena de cálculo

En este tema se describe la clase CalculationChain 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 los elementos y elementos que componen un documento SpreadsheetML, vea Estructura de un documento SpreadsheetML.

CalculationChain en SpreadsheetML

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

Una instancia de este tipo de parte contiene un conjunto ordenado de referencias a todas las celdas en todas las hojas de cálculo del libro cuyo valor se calcula a partir de cualquier fórmula. La ordenación permite que se calculen fórmulas de celda interrelacionadas en el orden correcto cuando una hoja de cálculo se carga para usarse.

Un paquete no debe contener más de una parte de cadena de cálculo.

El elemento raíz de una parte de este tipo de contenido debe ser calcChain.

La parte de cadena de cálculo especifica el orden en que las celdas del libro se calcularon por última vez. Solo registra información sobre las celdas que contienen fórmulas. No incluye ninguna información sobre el árbol de cálculo de dependencia de fórmula. En otras palabras, la parte de cadena de cálculo no indica las dependencias que tienen las fórmulas con otros valores de celda; solo indica el orden que las celdas se calcularon por última vez.

Cualquier evento de cálculo determinado puede hacer que el orden de la cadena de cálculo se reorganice o modifique. Por ejemplo, al agregar más fórmulas al libro, se agregan referencias en la parte de cadena de cálculo.

Otro ejemplo de cómo se puede actualizar la orden de cálculo implica la idea de cálculo parcial. El cálculo parcial es una optimización que una aplicación de hoja de cálculo puede implementar para calcular solo las celdas que dependen de otras celdas cuyos valores han cambiado y para omitir las demás fórmulas del libro. Esto ayuda a evitar que se vuelvan a calcular de forma redundante los resultados que ya se conocen. Por lo tanto, si un conjunto de fórmulas que se omitió previamente durante un cálculo se vuelve necesario para el cálculo (debido al cambio de valor de una celda), estas fórmulas se mueven al "principio" de la cadena de cálculo para que se puedan evaluar.

Aunque una aplicación de hoja de cálculo puede cargar información de la cadena de cálculo, no es necesario. Se puede construir una cadena de cálculo en la memoria durante la carga según las fórmulas y su interdependencia, si la aplicación de la hoja de cálculo encuentra esta información útil. El orden que se expresa en la parte de cadena de cálculo no puede forzar o dictar a la aplicación en implementación el orden en que los cálculos deben realizarse en tiempo de ejecución.

© ISO/IEC29500: 2008.

En la tabla siguiente se enumeran las clases comunes del SDK de Open XML que se usan al trabajar con la clase CalculationChain .

Elemento de SpreadsheetML Open XML SDK (clase)
c CalculationCell

Clase CalculationChain del SDK de Open XML

La claseCalculationChain del SDK de Open XML representa el elemento paragraph (<calcChain>) definido en el esquema de formato de archivo Open XML para documentos SpreadsheetML. Use la clase CalculationChain para manipular elementos calcChain> individuales < en un documento SpreadsheetML.

Clase CalculationCell

La clase CalculationCell representa el elemento cell (<si>) que representa una celda que contiene una fórmula.

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

Todos los elementos c representan una celda que contiene una fórmula. La primera celda calculada aparece en primer lugar (de arriba a abajo), y así sucesivamente. El atributo de referencia r indica la dirección de la celda en la hoja. El atributo de índice i indica el índice de la hoja con el que se asocia esa celda.

© ISO/IEC29500: 2008.

SpreadsheetML

La siguiente información de la especificación ISO/IEC 29500 muestra el XML de una cadena de cálculo de ejemplo después de que la aplicación realiza su primer cálculo completo.

<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>