Atualização transacional do cache de Pivot
A versão 2.384.92 atualiza fontes de Pivot locais retangulares, de nome definido e de tabela sem alterar objetos de campo existentes, objetos de item compartilhado ou índices lógicos de membros; todas as views de tabela dinâmica que compartilham o cache continuam se referindo aos mesmos membros
Atualização da pasta de trabalho
Workbook.Recalculate;
if Workbook.RefreshPivotCache(Pivot.CacheId) <> 1 then
raise Exception.Create('Pivot cache refresh failed');
TXLSXWorkbook.RefreshPivotCache retorna 1 após uma atualização bem-sucedida e -1 quando o cache, a fonte, o esquema ou os valores de fonte não podem ser atualizados; ele lê os valores atuais das células, então recalcule a pasta de trabalho primeiro quando as fórmulas de fonte precisarem de avaliação
Uma fonte retangular usa uma planilha local existente e uma linha de cabeçalho; SourceFirstRow, SourceFirstCol, SourceLastRow e SourceLastCol usam coordenadas inclusivas com base um, e a primeira linha fornece os nomes de campo
Fontes de nome definido e de tabela
Quando SourceIsNamedRange=True, SourceName identifica um nome definido ou um nome de tabela exclusivo ou nome de exibição; a atualização e a materialização resolvem a geometria atual dele a cada chamada, preservando a identidade de fonte armazenada no cache
SourceRangeSheet fornece o contexto de planilha para um nome definido local; esse escopo tem precedência sobre um nome da pasta de trabalho com a mesma grafia, e de resto a resolução usa o escopo da pasta de trabalho sem escolher um nome local sem relação
Um nome definido deve conter um retângulo absoluto explicitamente qualificado por planilha; nomes de planilha entre aspas e Unicode têm suporte, enquanto referências relativas, uniões, aliases, fórmulas, referências externas e colisões ambíguas de nome/tabela são rejeitadas antes da mutação
Uma tabela deve manter uma linha de cabeçalho; os registros seguem a extensão atual dela e excluem uma linha de totais real, enquanto as verificações de colisão protegem a tabela inteira, incluindo os totais; uma tabela somente de cabeçalho fornece zero registros
A composição física de totais segue o totalsRowCount armazenado, cujo valor ausente significa zero; uma dica de UI de totais sozinha não remove uma linha de dados, e salvar grava a composição real explicitamente
Para uma linha de totais criada, forneça metadados válidos de totais de coluna e conteúdo de planilha por meio de ColumnTotalsRowLabels, ColumnTotalsRowFunctions e ColumnTotalsRowFormulas; definir TotalsRowShown=True não cria fórmulas de totais nem coage valores de célula
Movimentos de planilha retêm o escopo local de nomes, e renomeações de planilha atualizam referências locais com suporte e o contexto de fonte de Pivot, preservando referências externas sem relação e o XML opaco de cache importado; salvar o nome definido remove um sinal de igual de fórmula inicial opcional sem alterar a fórmula em memória
Cabeçalhos correspondem a campos de banco de dados existentes pelo nome sem diferenciar maiúsculas; reordenar colunas de fonte preserva os índices lógicos de campo, enquanto campos de fonte duplicados, renomeados, ausentes ou extras são rejeitados; cabeçalhos vazios usam o fallback existente FieldN
Células de fonte vazias permanecem vazias sem serem adicionadas à coleção de células da planilha; fontes somente de cabeçalho produzem zero registros mantendo os membros históricos
Membros estáveis e views compartilhadas
Itens compartilhados existentes mantêm seus índices e identidades de objeto, e novos valores tipados são anexados ao domínio; reordenar, remover e reintroduzir mais tarde membros de fonte preserva itens ocultos, seleções de página, referências de item base e mapeamentos explícitos de grupo que já identificam esses membros
Todas as views que compartilham um cache veem os registros atualizados; membros históricos ausentes permanecem no domínio do cache, mas não criam linhas de agregação por si só, porque TXLSPivotTable.Make constrói resultados a partir dos registros atuais
Membros históricos são retidos independentemente de MissingItemsLimit; este caminho de atualização não expurga membros ausentes, não impõe um limite de membros retidos nem renumera índices de seleção
Valores numéricos, de data, Boolean, de texto, em branco e de erro representável retêm seus tipos durante a atualização e o salvamento XLSX; os sinalizadores de conteúdo de item compartilhado e os limites representáveis são recalculados a partir do domínio retido e recém-anexado
Salvar completa as listas de membros de view atualizadas antes dos itens de subtotal finais, preservando a ordem existente, sinalizadores ocultos e extensões de layout importadas; as seleções de página mapeiam entre membros lógicos do cache e as posições armazenadas em cada view, de modo que listas de membros reordenadas ainda selecionam o mesmo membro após reabrir
Campos calculados e agrupados
Campos calculados não consomem colunas de fonte; os nomes, fórmulas e domínios de item compartilhado deles permanecem disponíveis, enquanto cada registro atualizado começa com um placeholder vazio para esses campos; Make avalia fórmulas calculadas com suporte a partir dos valores atuais de fonte
Registros de cache XLSX armazenam apenas campos de banco de dados; salvar e reabrir preservam o alinhamento de colunas de fonte mesmo quando campos calculados ocorrem entre campos de banco de dados
Agrupamento numérico e de data em um campo de fonte pode aceitar novos membros; o agrupamento discreto explícito aceita membros existentes reordenados, mas rejeita um novo membro sem mapeamento explícito, preservando todo o cache anterior
A versão 2.384.94 reconstrói campos agrupados derivados fixos com suporte a partir de links base/pai validados; expansão automática de domínio, membros discretos sem mapeamento e campos de member-property são rejeitados transacionalmente, enquanto fontes externas e OLAP permanecem fora do contrato de fonte local; consulte os limites do cache agrupado
Atualizações atômicas e atualização por callback
Validação de fonte, leitura, conversão de tipo, alocação de registros e busca de membros terminam em dados de preparação desanexados; uma falha deixa handles vivos de campo e de item, registros, metadados, estado de replay bruto e todas as views compartilhadas intactos
O sucesso substitui os buffers de registro e de busca, desabilita o replay bruto do cache, atualiza RefreshedDate e define RefreshOnLoad=False; salvar usa o cache tipado atualizado em vez de reproduzir a representação bruta anterior dele
Código autônomo ou apoiado no Classic pode usar a mesma implementação de preparação por meio de TXLSPivotCache.RefreshFromSource; o reader dele recebe coordenadas de fonte com base um e retorna um Variant, e falhas de validação ou do reader disparam uma exceção
TlxPivotSourceCellValue = function(ARow, ACol: Integer): Variant of object;
procedure TXLSPivotCache.RefreshFromSource(AValueReader: TlxPivotSourceCellValue); procedure TXLSPivotCache.RefreshFromSource(AValueReader: TlxPivotSourceCellValue; AFirstRow, AFirstCol, ALastRow, ALastCol: Integer);
O overload de um argumento exige um retângulo local concreto no cache; o overload de limites explícitos lê um retângulo local resolvido pelo chamador sem alterar a identidade de fonte nomeada ou de tabela do cache, e os chamadores continuam responsáveis por resolver essa identidade corretamente
A atualização do cache atualiza os dados do cache; aplicativos podem chamar Make com o result writer próprio ou MaterializePivotTable para saída de planilha com guarda; a seleção tipada de Slicer de Pivot não OLAP está disponível para vinculações importadas com suporte, enquanto o layout nativo completo continua sendo um trabalho separado