Materialização segura de tabelas dinâmicas na folha de cálculo
A versão 2.384.90 adiciona avaliação isolada de tabelas dinâmicas e substituição guardada de resultados na folha de cálculo; a versão 2.384.92 estende as origens locais suportadas a nomes definidos e tabelas resolvidos em cada chamada
Materializar uma vista
if Workbook.RefreshPivotCache(Pivot.CacheId) <> 1 then
raise Exception.Create('Pivot cache refresh failed');
if Workbook.MaterializePivotTable(Pivot) <> 1 then
raise Exception.Create('Pivot output cannot be replaced safely');
O TXLSXWorkbook.MaterializePivotTable(ATable: TXLSPivotTable): Integer calcula os resultados a partir da cache atual e coloca-os na FirstRow e na FirstCol da vista; devolve 1 em caso de sucesso ou -1 para origens não suportadas, destinos inseguros, falha de avaliação ou mutação do livro rejeitada
A atualização e o recálculo da folha de cálculo continuam a ser operações explícitas; a materialização bem sucedida invalida as dependências de cálculo, para que os chamadores possam recalcular as fórmulas a jusante quando adequado
A sobrecarga predefinida aceita células de destino em branco e células inalteradas anteriormente detidas pela mesma vista; células ocupadas sem dono em qualquer ponto do retângulo de saída completo provocam rejeição da operação, incluindo os vazios que o escritor de resultados não preenche
if Workbook.MaterializePivotTable(Pivot, True) <> 1 then
raise Exception.Create('Existing Pivot values cannot be adopted safely');
O TXLSXWorkbook.MaterializePivotTable(ATable: TXLSPivotTable; AAdoptExisting: Boolean): Integer pode adotar explicitamente células escalares existentes dentro do retângulo anterior declarado da vista na primeira materialização; não autoriza substituir fórmulas, membros de matrizes, texto formatado, células com metadados nem conteúdo fora desse retângulo
Detenção, redimensionamento e movimento
A vista retém coordenadas exatas e snapshots de valores com tipo para as células escritas; a gravação em XLSX preserva esta detenção na definição da tabela dinâmica, para que atualizações posteriores a possam validar após reabrir
Conteúdo com tipo alterado ou uma célula detida não vazia removida provoca rejeição de toda a atualização; os subtipos numéricos partilham uma representação numérica canónica, enquanto texto, valores Boolean e erros mantêm identidades distintas
Encolher ou mover um resultado limpa apenas os valores detidos inalterados que deixam de ser produzidos; os objetos de células, a formatação e os comentários existentes continuam disponíveis, e as células não relacionadas ficam fora do conjunto de detenção
Mudar a FirstRow ou a FirstCol move a próxima saída, enquanto as coordenadas de detenção anteriores continuam disponíveis para limpeza; um resultado vazio limpa os valores detidos e retém uma localização só com âncora
Pré-visualização isolada
function TXLSPivotTable.MakePreview(AWriter: TlxPivotResultWriter): Integer; property TXLSPivotTable.EvaluationSourceTable: TXLSPivotTable;
O TXLSPivotTable.MakePreview usa cópias independentes da cache e da vista, incluindo marcadores de campos calculados, e descarta-as após a avaliação; o Make comum mantém o respetivo comportamento existente de cache viva
O escritor recebe offsets de linha e coluna de base zero e valores com tipo; o valor devolvido segue a contagem de células agregadas do Make, que é separada do número de chamadas ao escritor; uma cache ou escritor em falta devolve zero, e as exceções de avaliação ou do escritor propagam-se
Os predicados de registos do chamador e os filtros de detentores registados continuam ativos nas pré-visualizações, incluindo seleções de Slicers do livro; os callbacks recebem a vista temporária avaliada e a respetiva cache temporária
O TXLSPivotTable.EvaluationSourceTable devolve a vista viva numa avaliação comum e a vista viva original numa pré-visualização; use-o quando um callback precisar de identificar uma vista ligada, lendo os registos avaliados da Cache temporária do callback
Os detentores dos callbacks continuam a pertencer ao chamador; os objetos de pré-visualização e os respetivos registos não devem ser retidos depois de o callback ou a chamada de pré-visualização terminar
Limites de segurança
A materialização exige uma vista e uma cache registadas no mesmo livro e uma origem local retangular, de nome definido ou de tabela suportada; a resolução da origem segue os nomes e as extensões de tabelas atuais, e origens não suportadas ou por resolver provocam rejeição antes da mutação
A geometria atual da origem, outras localizações de tabelas dinâmicas, tabelas estruturadas, intervalos de resultados de consultas, células unidas e matrizes fixas ou dinâmicas não podem cruzar a nova saída nem as células antigas detidas que precisem de limpeza; os totais da tabela continuam protegidos, embora fiquem excluídos dos registos da cache
A validação e a preparação da saída correm sob um lease de leitura, seguido da guarda normal de mutação do livro e da verificação de geração; uma vista do livro só de leitura congelada rejeita a materialização sem substituir células nem mudar a geometria
Os filtros têm de ser só de leitura e seguir o contrato comum de escritor único do livro; o isolamento impede que os cálculos normais de pré-visualização mudem a cache viva, mas escritas arbitrárias de callbacks através de objetos vivos capturados separadamente não podem ser revertidas
Esta operação materializa o layout de resultados calculados da biblioteca; a autoria completa de layout nativo de tabelas dinâmicas, a criação de UI de Slicers e a avaliação de apresentação sem dados de filtragem cruzada continuam a ser capacidades separadas