Documentación de HotXLS

Selección de Slicers Pivot que no son OLAP

La versión 2.384.88 añade la selección con tipo de miembros a las cachés de Slicers Pivot importadas que no son OLAP y que pueden vincularse a campos de caché locales ordinarios y a sus vistas conectadas de tabla dinámica

Inspeccionar y cambiar una selección

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');

TXLSXSlicerCache.IsNonOlapPivot identifica la forma tabular de tabla dinámica; TXLSXSlicerCache.ItemCount, TXLSXSlicerCache.ItemCacheIndex y TXLSXSlicerCache.ItemSelected exponen la lista de miembros analizada y la selección

Las posiciones de la lista de miembros son de base cero; cada ItemCacheIndex identifica un miembro compartido en el campo de la caché de tabla dinámica vinculada, de modo que los miembros numéricos, de texto, Boolean, de fecha, en blanco y de error conservan identidades separadas incluso cuando su texto mostrado coincide

TXLSXSlicerCacheItem almacena un CacheItemIndex: Integer y Selected: Boolean; TXLSXSlicerCacheItems es su tipo de matriz dinámica, mientras que la caché expone la selección mediante propiedades indexadas de solo lectura

TXLSXSlicerCache.SetSelectedItems acepta índices de miembros compartidos y devuelve 1 si tiene éxito o -1 para vinculaciones no admitidas, no válidas o inseguras; una selección vacía se rechaza porque el formato de archivo exige al menos un miembro seleccionado

TXLSXSlicerCache.ClearSelection devuelve la misma convención de estado y selecciona todos los miembros; elimina esta restricción del Slicer manteniendo las restricciones independientes en otros campos

Vistas compartidas y filtros existentes

Los miembros seleccionados dentro de una caché de Slicer forman una unión; las cachés de Slicer aplicables se intersectan para cada vista conectada explícitamente, incluso cuando el campo seleccionado está ausente de los ejes mostrados de esa vista; varias vistas de UI de Slicer de una misma caché comparten la misma selección

Llama a TXLSPivotTable.Make con el escritor de resultados de la aplicación para calcular los resultados actuales; los cambios de selección de la caché no reescriben las celdas de la hoja ni regeneran cada diseño nativo importado

Excel almacena las selecciones de Slicers que no son OLAP como ocultación ordinaria de miembros y selección de página de la tabla dinámica; el formato no registra qué operación creó un indicador individual de ocultación

Antes de modificar una vinculación importada, HotXLS valida que sus máscaras antiguas de ocultación y página del mismo campo coincidan con la selección antigua efectiva del Slicer; las máscaras coincidentes se tratan como gestionadas por el Slicer, mientras que las máscaras incoherentes o ambiguas se rechazan sin suponer nada; los filtros manuales, de página y avanzados de campos no relacionados siguen activos

Guardado y actualización del origen

Al guardar se actualizan juntas la selección del Slicer y las máscaras de miembros de la tabla dinámica conectada, se conservan los espacios de nombres XML importados y las extensiones desconocidas, y se remapean las conexiones de hoja a sus identidades guardadas; los identificadores extendidos de caché de Slicer permanecen distintos de los identificadores ordinarios de caché de tabla dinámica del libro

La actualización local de la caché de tabla dinámica retiene los índices de miembros compartidos seleccionados; los subconjuntos explícitos excluyen los miembros nuevos, mientras que las selecciones despejadas permiten el dominio actualizado completo

Límites y comportamiento ante fallos

Los cambios de selección validan todas las vistas y miembros conectados antes de confirmar y usan el guardián de mutación del libro; un fallo preserva la selección existente, las restricciones de las vistas y el XML original

Añadir, eliminar y despejar cachés de Slicer también usan el guardián de escritura del libro; una vista de libro inmovilizada no puede cambiar los resultados conectados de la tabla dinámica mediante la mutación de colecciones

Eliminar una caché de tabla dinámica vinculada que no sea OLAP, o despejar una colección que la contenga, se rechaza antes de la mutación; la operación explícita de ciclo de vida RemoveSlicerCache elimina sus vistas nativas y o despeja o transfiere su selección a máscaras ordinarias de tabla dinámica

La selección OLAP y de caché de tabla, los campos del origen agrupados o calculados, las conexiones ausentes, los dominios incoherentes y las máscaras importadas ambiguas del mismo campo quedan fuera de esta operación; los contenidos de caché no admitidos conservan su representación original

Esta API de selección gestiona cachés de Slicer Pivot importadas y escritas admitidas; la creación de vistas compartidas y la eliminación explícita de cachés están disponibles en 2.384.94; la materialización segura en la hoja puede reemplazar la salida calculada admitida, mientras que la evaluación de visualización sin datos de filtro cruzado sigue siendo trabajo aparte

Eliminar la última vista de UI de una caché vinculada que no sea OLAP se rechaza antes de cambiar su dibujo, vista o caché; eliminar una de varias vistas de UI conserva su caché y selección compartidas

Despejar las vistas de Slicer de una hoja comprueba cada caché afectada antes de eliminar cualquier vista; una última vista vinculada provoca el rechazo atómico, mientras que las vistas compartidas con otras hojas conservan su caché y selección

Filtros de registros adicionales

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;

TXLSPivotTable.SetRecordFilter registra o reemplaza un callback por propietario no nil, y TXLSPivotTable.ClearRecordFilter elimina el callback de ese propietario; pasar un callback nil a SetRecordFilter también lo elimina

Los callbacks registrados y el TXLSPivotTable.ExternalRecordFilter opcional se intersectan antes de los filtros y la agregación propios de la tabla; el libro registra su callback de Slicer de forma independiente, de modo que no sobrescribe el predicado del llamador

Los callbacks reciben índices de registro de base cero, se toman como instantánea para cada llamada a Make y no se serializan ni copian mediante AssignPivotOnly; los propietarios y los destinos de los callbacks siguen siendo del llamador y deben sobrevivir a su registro