Saída de Pivot nativa, consultas de filtro cruzado e membros ausentes
Saída de planilha nativa em cache
function TXLSXWorkbook.MaterializeNativePivotTable( ATable: TXLSPivotTable): Integer; function TXLSXWorkbook.MaterializeNativePivotTable( ATable: TXLSPivotTable; AAdoptExisting: Boolean): Integer;
A operação prepara tanto a grade completa de relatório nativo compacto, tabular ou de contorno quanto a localização, rowItems, colItems e metadados de eixo de dados dela antes de confirmar os valores da planilha e a propriedade da saída juntos; retorna 1 em caso de sucesso ou -1 com um diagnóstico para estado sem suporte ou uma colisão
Views locais não vazias com suporte retêm filtros atuais, identidades exatas de membros de cache, hierarquias comuns, domínios agrupados com suporte, subtotais padrão ou personalizados e qualquer eixo de dados com suporte; a grade nativa usa os valores de agregação originais em vez de recombinar médias exibidas ou outros resultados não aditivos
Objetos de célula e formatação existentes permanecem disponíveis, enquanto reduzir ou mover o relatório limpa apenas valores próprios anteriores inalterados; saída editada, sobreposição de fonte, mesclagens, fórmulas, arrays e outros relatórios são rejeitados antes da mutação
Saída escalar importada exige adoção explícita com AAdoptExisting=True; atualizações posteriores usam a propriedade persistida de célula individual, inclusive depois de salvar e reabrir
A operação lê os registros atuais do cache e não atualiza dados de fonte nem recalcula fórmulas; Cache.RefreshOnLoad=False é válido porque a planilha agora contém resultados nativos preparados reais
Callbacks de filtro de registro do chamador participam da preview desanexada, mas não têm representação OOXML; a atualização nativa explícita do Excel não consegue reproduzir restrições arbitrárias de callback, enquanto filtros manuais e de Slicer persistidos com suporte retêm a representação de rede deles
Campos de cache calculados SUM com suporte e itens calculados de propriedade do cache usam o contrato de soma de contexto descrito em Campos de Pivot calculados nativos e itens de propriedade do cache; legendas de membros personalizadas e combinações de layout sem suporte são rejeitadas explicitamente, enquanto o layout bruto gerado com suporte retém XML sem relação e máscaras de membros atuais
TryXLSXMakeNativePivotLayout(const Xml: WideString; Table: TXLSPivotTable; AWriter: TlxPivotResultWriter; out ResultXml, Reason: WideString): Boolean é o helper de layout preparado de nível mais baixo em lxPivotXml
O writer dele recebe o retângulo inteiro do relatório em ordem linha a linha, incluindo células em branco, com offsets com base zero a partir da âncora da tabela; o preflight de XML e de grade termina antes do primeiro callback, mas gravações de propriedade do chamador não podem ser revertidas se um callback disparar uma exceção
A fachada da pasta de trabalho fornece um writer de captura desanexado para atualizações transacionais de células; a preview preparada combinada e as grades nativas de Variant são limitadas a 4194304 células
O caminho de preview nativa pode solicitar orientação nativa de total geral por meio do parâmetro opcional AUseNativeGrandTotals de TXLSPivotTable.MakePreview; as chamadas existentes de writer único e de writer de layout preservam o comportamento anterior delas
Layout e rótulos repetidos
Defina Compact e Outline no relatório e em cada campo de linha antes da materialização; campos tabulares usam ambos os sinalizadores como False, campos de contorno usam Compact=False e Outline=True, e campos compactos usam ambos os sinalizadores como True
property TXLSPivotField.RepeatLabels: Boolean;
RepeatLabels tem False como padrão, copia de forma independente com o campo e lê ou grava a extensão nativa x14:pivotField fillDownLabels; ele repete os rótulos ancestrais em saída tabular e de contorno e não tem efeito em um campo cujos sinalizadores compact e outline estão ambos habilitados
Cada campo de linha separado recebe a própria coluna física, enquanto campos de contorno compactos adjacentes compartilham uma coluna de rótulos; várias medidas nas linhas seguem CompactData, e várias medidas nas colunas retêm legendas de dados independentes e totais gerais
Subtotais tabulares padrão aparecem abaixo do grupo deles; SubtotalTop de contorno seleciona a localização no topo ou na base, enquanto medidas nas linhas usam linhas de agregação separadas abaixo do grupo e retêm a legenda de cada medida
A saída nativa em cache deixa interseções ausentes de linha e coluna em branco e preserva um zero numérico real; o Make comum e previews sem a opção nativa retêm o comportamento anterior delas de resultado vazio
Campos inativos e de medida herdam o layout do relatório nos metadados nativos preparados, de modo que a atualização explícita do Excel retém as legendas apropriadas de campo e de dados; a operação preserva as configurações vivas de campo e as verificações de propriedade existentes
Extensões importadas de rótulos repetidos aceitam aliases de namespace, incluindo declarações no próprio elemento de extensão; XML desconhecido sem relação permanece preservado pelo caminho de materialização nativa
Membros agrupados, ordem de eixo e subtotais personalizados
A saída nativa aceita grupos completos de intervalo numérico, grupos de data e grupos manuais de membros representados pelos metadados de agrupamento tipados existentes do cache; os rótulos gerados retêm os GroupItemLabels importados exatos, incluindo Unicode e legendas de data localizadas
O agrupamento é avaliado em um cache desanexado, preservando os registros do cache vivo, os handles de itens compartilhados e as identidades de grupo; limites inválidos, intervalo zero, domínios incompletos ou tipos de valor de item de grupo sem suporte são rejeitados antes de a saída da planilha mudar
O TXLSPivotField.Position existente com base zero determina a ordem estável nativa do eixo de linha ou coluna; posições iguais retêm a ordem de campos criada, de modo que campos recém-criados com a posição padrão retêm a ordenação anterior deles
Hierarquias nativas importadas de Ano/Mês e de pais/membros manuais retêm a sequência de eixo explícita delas, enquanto índices de campos de cache, índices de campos de view e identidades de base de cálculo de exibição permanecem inalterados; grupos manuais honram a ordem explícita de itens de Pivot em vez de ordenar rótulos de grupo ou índices de cache
Subtotais personalizados de linha aceitam xlpsSum, xlpsCount, xlpsAverage, xlpsMax, xlpsMin, xlpsProduct, xlpsCountNumbers, xlpsStdDev, xlpsStdDevP, xlpsVar e xlpsVarP, incluindo múltiplas funções selecionadas, campos tabulares ou de contorno e medidas nas linhas
Cada função agrega os registros de fonte originais no próprio escopo de subtotal dela; os metadados de linha preparados dela identificam a função selecionada de forma independente, preservando o comportamento de atualização explícita do Excel para cálculos não aditivos e resultados vazios ou de erro
Uma seleção importada de subtotal personalizado exclui o subtotal automático implícito mesmo quando defaultSubtotal está ausente no XML nativo; aplicativos não devem combinar xlpsDefault com funções personalizadas, e uma solicitação tipada ambígua assim é rejeitada antes da mutação
Múltiplos níveis de campo de coluna com subtotais, combinações compactas de eixo de dados sem suporte, membros recolhidos e legendas personalizadas permanecem fora deste contrato de saída nativa; campos e itens calculados têm requisitos próprios mais estreitos de SUM e de identidade de membro, e a preservação bruta não implica suporte a recalcular ou materializar um recurso
Salvar, reabrir e materializar novamente retêm agrupamento, ordem de eixo e identidades de subtotal com suporte; views nativas importadas e caches tipados copiados de forma independente também foram verificados contra o Excel tanto na abertura inicial quanto na atualização explícita
Cálculos de exibição nativos
Defina ShowDataAs ou ExtendedShowDataAs de cada campo de dados comum antes de chamar MaterializeNativePivotTable; os modos de exibição básico e estendido são mutuamente exclusivos
Os modos básicos incluem diferença, porcentagem de um item base, diferença de porcentagem, total acumulado, porcentagem da linha, coluna ou total geral e índice; os modos estendidos incluem porcentagens de linha pai, coluna pai e pai selecionado, porcentagem acumulada e classificações densas crescentes ou decrescentes
BaseField é o índice de campo de Pivot com base zero para comparações, totais acumulados, porcentagens de pai selecionado e classificações; as comparações usam a posição de BaseItem com base zero, ou xlPivotBaseItemPrevious e xlPivotBaseItemNext para membros visíveis adjacentes na ordem de exibição efetiva
Porcentagens de linha pai e de coluna pai escolhem o campo de eixo mais interno correspondente sem usar BaseField; um eixo correspondente ausente deixa esses resultados em branco
Porcentagens simples dividem pela agregação original no escopo relevante, incluindo médias não aditivas; porcentagens acumuladas somam agregações de membros exibidas e usam o total original do eixo para um campo base mais interno, enquanto um campo base mais externo usa a soma pelos membros restantes correspondentes a ele, de modo que médias podem exceder 100 por cento
Classificações nativas contam valores de agregação distintos anteriores, e as comparações preservam o comportamento de branco e erro do Excel para interseções ausentes, bases ausentes, divisores zero e limites de anterior ou próximo; porcentagens simples tratam um numerador ausente como zero
Totais gerais usam a semântica nativa do modo selecionado, incluindo totais em branco ao longo de um eixo de comparação ou de acumulado; alterar um modo de exibição retém as verificações transacionais de propriedade, colisão e orçamento do relatório
Salvar e reabrir retém o modo básico ou estendido escolhido e as identidades de base, e os metadados nativos preparados aceitam uma atualização explícita do Excel; o Make comum e previews sem a opção nativa retêm o contrato de cálculo existente deles
Disponibilidade de filtro cruzado de Slicer
property TXLSXSlicerCache.ItemHasData[Index: Integer]: Boolean;
Esta consulta somente leitura avalia os registros atuais de cache não OLAP com suporte ignorando a própria seleção deste Slicer e retendo outras seleções de Slicer, filtros manuais, predicados do chamador e filtros de agregação aplicáveis
A disponibilidade é a união pelas views conectadas; membros históricos sem registros correspondentes não têm dados, medidas em branco não têm dados, e medidas de texto não vazio, Boolean, zero, erro e data contam como dados sob o contrato nativo verificado
A consulta usa uma concessão de leitura e uma preview de registros desanexada, preserva handles vivos e a seleção e honra FormulaArrayMemoryLimit; falha de callback, reentrada, vinculações inválidas ou membros calculados de agregação sem suporte disparam exceção sem confirmar mudanças vivas
Consultar a disponibilidade não atualiza caches, não recalcula fórmulas, não faz I/O de arquivo e não atualiza sinalizadores nativos serializados de sem dados; aplicativos não devem inferir o estado nativo de UI desta operação somente leitura
TlxPivotRecordWriter = procedure(ATable: TXLSPivotTable; ARecordIndex: Integer) of object; function TXLSPivotTable.MakeRecordPreview(AWriter: TlxPivotRecordWriter; AFilterOwner: TObject = nil; AFilter: TlxPivotRecordFilter = nil): Integer;
O callback avançado de registro recebe a preview desanexada e um índice de registro com base zero depois da filtragem simples e de agregação com suporte; EvaluationSourceTable retém a identidade original da view e o valor de retorno é o número de registros emitidos
Um filtro de substituição troca apenas o callback registrado do dono fornecido; outros donos e o predicado externo permanecem ativos, e um callback de substituição não nil exige um dono não nil
Expurgo explícito de membros históricos
Removed := Workbook.PurgePivotCacheMissingItems(
Pivot.CacheId, 0);
if Removed < 0 then
raise Exception.Create('The cache member purge was rejected');
TXLSXWorkbook.PurgePivotCacheMissingItems(ACacheId: Integer; ARetainMissingItemsPerField: Integer = 0): Integer remove membros não usados após validação completa e remapeamento de views e Slicers vinculados com suporte
Ele retorna a contagem total de itens compartilhados removidos por todos os campos, zero para uma não operação bem-sucedida, ou -1 com o diagnóstico 1402; os registros atuais retêm cada membro referenciado, mais no máximo o número solicitado de membros não usados por campo, escolhidos pelo maior índice original de item compartilhado
Membros retidos mantêm a ordem relativa original e os handles de objeto, enquanto os índices lógicos ficam compactos; handles vinculados de campo/item, sinalizadores manuais de oculto e de detalhe, membros ativos de página ou de comparação e seleções de Slicer retêm as identidades deles
Sinalizadores e limites de domínio são recalculados a partir do domínio retido; posições comprimidas importadas de linha/coluna e de página com suporte são remapeadas explicitamente, enquanto referências fictícias de total geral e ordinais de pseudo-campo de dados permanecem inalterados
Caches comuns completos de planilha local têm suporte; caches agrupados, calculados, de member-property, OLAP, externos, incompletos ou ambíguos e metadados opacos de identidade sem suporte são rejeitados antes da mutação
Remover um membro ativo de página ou de comparação, um subconjunto de Slicer selecionado inteiro ou uma interseção efetiva anteriormente não vazia é rejeitado atomicamente; atributos primitivos de membro que se perderiam durante a reconstrução tipada também são rejeitados
A extensão conhecida de propriedade de materialização permanece inalterada porque as coordenadas e os tokens de valor tipado dela não contêm índices de membros de cache; extensões opacas sem relação não são presumidas seguras
O expurgo não atualiza dados de fonte, não reescreve células de relatório da planilha, não invoca callbacks de registro e não aplica metadados MissingItemsLimit automaticamente; a atualização continua sendo apenas de acréscimo, a menos que esta operação seja solicitada explicitamente
Coordenação avançada de expurgo
TXLSPivotCache._PrepareMissingItemPurge retorna um TXLSPivotCachePurgePlan opaco; aplicativos normalmente devem usar a fachada da pasta de trabalho para que toda view e Slicer vinculados sejam incluídos
MapItem e RemainingItemCount inspecionam o remapeamento do cache, StagePivotField registra um campo vinculado e retorna o índice de preparação dele, e MapViewItemPosition inspeciona o mapeamento de posição de rede desse campo; membros removidos mapeiam para -1 e RemovedCount relata a contagem total de remoções
Validate verifica o esquema original, registros, identidades de propriedade de campo/item e seleções de view preparadas; Commit valida novamente e transfere a propriedade preparada sem alocação nem callbacks depois da primeira troca viva
O plano é dono dos snapshots desanexados, mantém o cache preparado mutável dele privado e nunca é dono dos objetos originais de cache ou view; mantenha esses originais vivos até o Destroy do plano liberar a preparação, e confirme cada plano apenas uma vez
Uma preparação de campo rejeitada desfaz essa etapa, de modo que o plano pode ser reutilizado; mutações sem suporte após a preparação são rejeitadas antes do commit