Seleção de Slicers de tabelas dinâmicas não OLAP
A versão 2.384.88 adiciona seleção de membros com tipo às caches importadas de Slicers de tabelas dinâmicas não OLAP, que podem ser vinculadas a campos de cache locais comuns e às respetivas vistas de PivotTable ligadas
Inspecionar e mudar uma seleção
SlicerCache := Workbook.SlicerCaches.FindByName('SlicerCategory');
if (SlicerCache = nil) or not SlicerCache.IsNonOlapPivot then
raise Exception.Create('A non-OLAP Pivot Slicer cache is required');
if SlicerCache.SetSelectedItems([1]) <> 1 then
raise Exception.Create('Slicer selection could not be changed');
O TXLSXSlicerCache.IsNonOlapPivot identifica a forma tabular de tabela dinâmica; o TXLSXSlicerCache.ItemCount, o TXLSXSlicerCache.ItemCacheIndex e o TXLSXSlicerCache.ItemSelected expõem a lista de membros analisada e a seleção
As posições da lista de membros são de base zero; cada ItemCacheIndex identifica um membro partilhado no campo da cache de tabelas dinâmicas vinculada, pelo que membros numéricos, de texto, Boolean, de data, em branco e de erro mantêm identidades separadas mesmo quando o respetivo texto apresentado coincide
O TXLSXSlicerCacheItem guarda um CacheItemIndex: Integer e um Selected: Boolean; o TXLSXSlicerCacheItems é o respetivo tipo de matriz dinâmica, enquanto a cache expõe a seleção através de propriedades indexadas só de leitura
O TXLSXSlicerCache.SetSelectedItems recebe índices de membros partilhados e devolve 1 em caso de sucesso ou -1 para bindings não suportados, inválidos ou inseguros; uma seleção vazia é rejeitada porque o formato de ficheiro exige pelo menos um membro selecionado
O TXLSXSlicerCache.ClearSelection devolve a mesma convenção de estado e seleciona todos os membros; remove esta restrição do Slicer mantendo restrições independentes nos outros campos
Vistas partilhadas e filtros existentes
Os membros selecionados dentro de uma cache de Slicer formam uma união; as caches de Slicers aplicáveis cruzam-se para cada vista explicitamente ligada, incluindo quando o campo selecionado está ausente dos eixos apresentados dessa vista; várias vistas de UI de Slicers de uma cache partilham a mesma seleção
Chame o TXLSPivotTable.Make com o escritor de resultados da aplicação para calcular os resultados atuais; as mudanças de seleção da cache não reescrevem células da folha de cálculo nem regeneram todos os layouts nativos importados
O Excel guarda as seleções de Slicers não OLAP como ocultação comum de membros e seleção de página de tabelas dinâmicas; o formato não regista que operação criou uma flag de ocultação individual
Antes de modificar um binding importado, o HotXLS valida que as máscaras antigas de ocultação e de página do mesmo campo correspondem à seleção antiga efetiva do Slicer; máscaras correspondentes são tratadas como geridas pelo Slicer, enquanto máscaras inconsistentes ou ambíguas são rejeitadas sem adivinhar; os filtros manuais, de página e avançados de campos não relacionados continuam ativos
Gravação e atualização da origem
Gravar atualiza a seleção do Slicer e as máscaras de membros da tabela dinâmica ligadas em conjunto, mantém os espaços de nomes XML importados e as extensões desconhecidas, e remapeia as ligações de folhas para as respetivas identidades gravadas; os identificadores estendidos de caches de Slicers mantêm-se distintos dos identificadores comuns de caches de tabelas dinâmicas do livro
A atualização local da cache de tabelas dinâmicas retém os índices de membros partilhados selecionados; os subconjuntos explícitos excluem novos membros, enquanto as seleções limpas permitem o domínio atualizado completo
Limites e comportamento em falhas
As mudanças de seleção validam todas as vistas e membros ligados antes do commit e usam a guarda de mutação do livro; uma falha preserva a seleção existente, as restrições das vistas e o XML original
Adicionar, eliminar e limpar caches de Slicers também usa a guarda de escrita do livro; uma vista do livro congelada não consegue mudar resultados ligados de tabelas dinâmicas através de mutação de coleções
Eliminar uma cache de tabela dinâmica não OLAP vinculada, ou limpar uma coleção que a contenha, é rejeitado antes da mutação; a operação explícita de ciclo de vida RemoveSlicerCache remove as respetivas vistas nativas e limpa ou transfere a respetiva seleção para máscaras comuns de tabelas dinâmicas
A seleção OLAP e de caches de tabelas, campos de origem agrupados ou calculados, ligações em falta, domínios inconsistentes e máscaras importadas ambíguas do mesmo campo ficam fora desta operação; o conteúdo de caches não suportado mantém a representação original
Esta API de seleção trata caches importadas e escritas suportadas de Slicers de tabelas dinâmicas; a autoria de vistas partilhadas e a remoção explícita de caches estão disponíveis na 2.384.94; a materialização segura na folha de cálculo pode substituir saída calculada suportada, enquanto a avaliação de apresentação sem dados de filtragem cruzada continua a ser trabalho separado
Eliminar a última vista de UI de uma cache não OLAP vinculada é rejeitado antes de mudar o respetivo desenho, vista ou cache; eliminar uma de várias vistas de UI retém a cache e a seleção partilhadas
Limpar as vistas de Slicers de uma folha de cálculo verifica todas as caches afetadas antes de remover qualquer vista; uma última vista vinculada causa rejeição atómica, enquanto as vistas partilhadas com outras folhas de cálculo retêm a respetiva cache e seleção
Filtros de registos adicionais
TlxPivotRecordFilter = function(ATable: TXLSPivotTable; ARecordIndex: Integer): Boolean of object; procedure TXLSPivotTable.SetRecordFilter(AOwner: TObject; AFilter: TlxPivotRecordFilter); procedure TXLSPivotTable.ClearRecordFilter(AOwner: TObject); property TXLSPivotTable.ExternalRecordFilter: TlxPivotRecordFilter;
O TXLSPivotTable.SetRecordFilter registra ou substitui um callback por detentor não nil, e o TXLSPivotTable.ClearRecordFilter remove o callback desse detentor; passar um callback nil ao SetRecordFilter também o remove
Os callbacks registados e o TXLSPivotTable.ExternalRecordFilter opcional cruzam-se antes dos filtros e da agregação da própria tabela; o livro registra o respetivo callback de Slicer de forma independente, pelo que não sobrescreve o predicado do chamador
Os callbacks recebem índices de registos de base zero, são capturados em snapshot para cada chamada ao Make e não são serializados nem copiados pelo AssignPivotOnly; os detentores e os alvos dos callbacks continuam a pertencer ao chamador e têm de sobreviver ao respetivo registo