Compartilhar via


Como trabalhar com a cadeia de cálculo

Este tópico discute a classe Open XML SDK CalculationChain e como ela se relaciona com o esquema Open XML File Format SpreadsheetML. Para obter mais informações sobre a estrutura geral das partes e elementos que compõem um documento SpreadsheetML, consulte Estrutura de um documento SpreadsheetML.

CalculationChain em PlanilhaML

As informações a seguir da especificação ISO/IEC 29500 introduzem o elemento CalculationChain (<calcChain>).

Uma instância desse tipo de parte contém um conjunto ordenado de referências a todas as células em todas as planilhas da pasta de trabalho cujo valor é calculado a partir de qualquer fórmula. A ordenação permite que fórmulas de células intersecionais sejam calculadas na ordem correta quando uma planilha é carregada para uso.

Um pacote não deve conter mais de uma parte da Cadeia de Cálculo.

O elemento raiz de uma parte desse tipo de conteúdo deve ser calcChain.

A parte Cadeia de Cálculo especifica a ordem em que as células na pasta de trabalho foram calculadas pela última vez. Ele só registra informações sobre células que contêm fórmulas. Ele não inclui nenhuma informação sobre a árvore de cálculo de dependência de fórmulas. Em outras palavras, a parte Cadeia de Cálculo não indica as dependências que as fórmulas têm em outros valores de célula; indica apenas a ordem em que as células foram calculadas pela última vez.

Qualquer evento de cálculo específico pode fazer com que a ordem da cadeia de cálculo seja reorganizada ou alterada. Por exemplo, adicionar mais fórmulas à pasta de trabalho adiciona referências na parte Cadeia de Cálculo.

Outro exemplo de como a ordem de cálculo pode ser atualizada envolve a ideia de cálculo parcial. O cálculo parcial é uma otimização que um aplicativo de planilha pode implementar para calcular apenas as células dependentes de outras células cujos valores foram alterados e ignorar outras fórmulas na pasta de trabalho. Isso ajuda a evitar a recalculação redundante de resultados que já são conhecidos. Portanto, se um conjunto de fórmulas que foram ignoradas anteriormente durante um cálculo se tornar necessário para cálculo (devido à alteração do valor de uma célula), essas fórmulas passarão para "primeiro" na cadeia de cálculo para que possam ser avaliadas.

Embora as informações da cadeia de cálculo possam ser carregadas por um aplicativo de planilha, elas não são necessárias. Uma cadeia de cálculo pode ser construída na memória em tempo de carga com base nas fórmulas e em sua interdependência, se o aplicativo de planilha achar essas informações úteis. A ordem expressa na parte Cadeia de Cálculo não força ou dita ao aplicativo de implementação a ordem na qual os cálculos devem ser executados no runtime.

© ISO/IEC29500: 2008.

A tabela a seguir lista as classes comuns de SDK Open XML usadas ao trabalhar com a classe CalculationChain .

Elemento SpreadsheetML Classe SDK Open XML
c CalculationCell

Classe Open XML SDK CalculationChain

A classe Open XML SDKCalculationChain representa o elemento parágrafo (<calcChain>) definido no esquema Open XML File Format para documentos SpreadsheetML. Use a classe CalculationChain para manipular elementos de calcChain> individuais < em um documento SpreadsheetML.

Classe de célula de cálculo

A classe CalculationCell representa o elemento célula (<si>) que representa uma célula que contém uma fórmula.

As informações a seguir da especificação ISO/IEC 29500 introduzem o elemento CalculationCell (<c>).

Cada elemento c representa uma célula que contém uma fórmula. A primeira célula calculada aparece primeiro (tobottom superior) e assim por diante. O atributo r de referência indica o endereço da célula na planilha. O atributo de índice i indica o índice da planilha com a qual essa célula está associada.

© ISO/IEC29500: 2008.

PlanilhaML

As informações a seguir do ISO/IEC 29500 mostram o XML para uma cadeia de cálculo de exemplo após o aplicativo executar seu primeiro 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>