Como trabalhar com a cadeia de cálculo
Este tópico aborda a classe Open XML SDK CalculationChain e como 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 de Folha de CálculoML, veja Estrutura de um documento de Folha de CálculoML.
CalculationChain em Folha de CálculoML
As seguintes informações da especificação ISO/IEC 29500 introduzem o CalculationChain
elemento (<calcChain/>
).
Uma instância deste tipo de peça contém um conjunto ordenado de referências a todas as células em todas as folhas de cálculo do livro cujo valor é calculado a partir de qualquer fórmula. A ordenação permite que as fórmulas de células interligadas sejam calculadas pela ordem correta quando uma folha de cálculo é carregada para utilização.
Um pacote não conterá mais do que uma parte da Cadeia de Cálculo.
O elemento raiz de uma parte deste tipo de conteúdo deve ser calcChain.
A parte Cadeia de Cálculo especifica a ordem pela qual as células no livro foram calculadas pela última vez. Apenas regista informações sobre células que contenham fórmulas. Não inclui quaisquer informações sobre a árvore de cálculo de dependência de fórmulas. Por outras palavras, a parte Cadeia de Cálculo não indica as dependências que as fórmulas têm noutros valores de células; indica apenas a ordem pela qual 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 ao livro 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 uma aplicação de folha de cálculo pode implementar para calcular apenas as células dependentes de outras células cujos valores foram alterados e ignorar outras fórmulas no livro. Isto ajuda a evitar recálculos redundantes de resultados que já são conhecidos. Por conseguinte, se um conjunto de fórmulas que foram ignoradas anteriormente durante um cálculo se tornar necessário para o cálculo (devido à alteração do valor de uma célula), estas fórmulas serão movidas 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 uma aplicação de folha de cálculo, não são necessárias. Uma cadeia de cálculo pode ser construída na memória no tempo de carregamento com base nas fórmulas e na respetiva interdependência, se a aplicação de folha de cálculo considerar estas informações úteis. A ordem expressa na parte Cadeia de Cálculo não força nem dita à aplicação de implementação a ordem pela qual os cálculos têm de ser efetuados no runtime.
© ISO/IEC 29500: 2016
A tabela seguinte lista as classes comuns do SDK Open XML utilizadas ao trabalhar com a CalculationChain
classe .
Elemento SpreadsheetML | Abrir Classe SDK XML |
---|---|
<c/> |
Célula de Cálculo |
Open XML SDK CalculationChain Class
A classe Open XML SDK CalculationChain
representa o elemento parágrafo (<calcChain/>
) definido no esquema Open XML File Format para documentos de Folha de CálculoML. Utilize a CalculationChain
classe para manipular elementos individuais <calcChain/>
num documento de Folha de CálculoML.
Classe de Célula de Cálculo
A CalculationCell
classe representa o elemento de célula (<c/>
) que representa uma célula que contém uma fórmula.
As seguintes informações da especificação ISO/IEC 29500 introduzem o CalculationCell
elemento (<c/>
).
Cada elemento c representa uma célula que contém uma fórmula. A primeira célula calculada é apresentada primeiro (de cima para baixo) e assim sucessivamente. O atributo de referência r indica o endereço da célula na folha. O atributo de índice i indica o índice da folha com a qual essa célula está associada.
© ISO/IEC 29500: 2016
Folha de CálculoML
As seguintes informações do ISO/IEC 29500 mostram o XML de uma cadeia de cálculo de exemplo depois de a aplicação efetuar o 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>