Materialização segura de tabela dinâmica na planilha
A versão 2.384.90 adiciona avaliação de Pivot isolada e substituição com guarda de resultados de planilha; a versão 2.384.92 estende as fontes locais com suporte para nomes definidos e tabelas resolvidos a cada chamada
Materializar uma view
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');
TXLSXWorkbook.MaterializePivotTable(ATable: TXLSPivotTable): Integer calcula os resultados a partir do cache atual e os coloca no FirstRow e no FirstCol da view; retorna 1 em caso de sucesso ou -1 para fontes sem suporte, destinos inseguros, falha de avaliação ou uma mutação da pasta de trabalho rejeitada
Atualização e recálculo de planilha continuam sendo operações explícitas; a materialização bem-sucedida invalida as dependências de cálculo para que os chamadores possam recalcular fórmulas downstream quando apropriado
O overload padrão aceita células de destino em branco e células inalteradas de propriedade anterior da mesma view; células ocupadas sem dono em qualquer lugar dentro do retângulo completo de saída rejeitam a operação, incluindo lacunas que o result writer não preenche
if Workbook.MaterializePivotTable(Pivot, True) <> 1 then
raise Exception.Create('Existing Pivot values cannot be adopted safely');
TXLSXWorkbook.MaterializePivotTable(ATable: TXLSPivotTable; AAdoptExisting: Boolean): Integer pode adotar explicitamente células escalares existentes dentro do retângulo anterior declarado da view na primeira materialização dela; não autoriza substituir fórmulas, membros de matriz, rich text, células com metadados ou conteúdo fora desse retângulo
Propriedade, redimensionamento e movimento
A view retém coordenadas exatas e snapshots de valores tipados para as células gravadas; salvar em XLSX preserva essa propriedade na definição de Pivot, de modo que atualizações posteriores possam validá-la após reabrir
Conteúdo tipado alterado ou uma célula própria não vazia removida rejeita toda a atualização; subtipos numéricos compartilham uma representação numérica canônica, enquanto texto, valores Boolean e erros retêm identidades distintas
Reduzir ou mover um resultado limpa apenas valores próprios inalterados que não são mais produzidos; objetos de célula existentes, formatação e comentários permanecem disponíveis, e células sem relação permanecem fora do conjunto de propriedade
Alterar FirstRow ou FirstCol move a próxima saída enquanto as coordenadas de propriedade anteriores permanecem disponíveis para limpeza; um resultado vazio limpa os valores próprios e retém uma localização somente de âncora
Preview isolada
function TXLSPivotTable.MakePreview(AWriter: TlxPivotResultWriter): Integer; property TXLSPivotTable.EvaluationSourceTable: TXLSPivotTable;
TXLSPivotTable.MakePreview usa cópias independentes do cache e da view, incluindo placeholders de campos calculados, e as descarta após a avaliação; o Make comum retém seu comportamento existente de cache vivo
O writer recebe offsets de linha e coluna com base zero e valores tipados; o valor de retorno segue a contagem de células de agregação do Make, que é separada do número de chamadas do writer; um cache ou writer ausente retorna zero, e exceções de avaliação ou do writer propagam
Predicados de registro do chamador e filtros de dono registrados permanecem ativos nas previews, incluindo seleções de Slicer da pasta de trabalho; os callbacks recebem a view temporária avaliada e o cache temporário dela
TXLSPivotTable.EvaluationSourceTable retorna a view viva para uma avaliação comum e a view viva original para uma preview; use-o quando um callback precisar identificar uma view conectada, lendo os registros avaliados do Cache temporário do callback
Donos de callbacks permanecem de propriedade do chamador; objetos de preview e os registros deles não devem ser retidos após o fim do callback ou da chamada de preview
Limites de segurança
A materialização exige uma view e um cache registrados na mesma pasta de trabalho e uma fonte local retangular, de nome definido ou de tabela com suporte; a resolução de fonte segue nomes e extensões de tabela atuais, e fontes sem suporte ou não resolvidas são rejeitadas antes da mutação
A geometria atual de fonte, outras localizações de Pivot, tabelas estruturadas, intervalos de resultado de consulta, células mescladas e arrays fixos ou dinâmicos não podem cruzar a nova saída nem as células próprias antigas que precisam de limpeza; os totais da tabela permanecem protegidos mesmo que sejam excluídos dos registros do cache
Validação e preparação de saída rodam sob uma concessão de leitura, seguidas da guarda normal de mutação da pasta de trabalho e da verificação de geração; uma view somente leitura congelada da pasta de trabalho rejeita a materialização sem substituir células nem alterar a geometria
Filtros devem ser somente leitura e seguir o contrato comum de escritor único da pasta de trabalho; o isolamento impede que cálculos normais de preview mudem o cache vivo, mas gravações arbitrárias de callback por meio de objetos vivos capturados separadamente não podem ser revertidas
Esta operação materializa o layout de resultado calculado da biblioteca; criação completa de layout nativo de Pivot, criação de UI de Slicer e avaliação de exibição de sem dados de filtro cruzado continuam sendo capacidades separadas