Materialización segura de tablas dinámicas en la hoja
La versión 2.384.90 añade evaluación Pivot aislada y reemplazo protegido de resultados en la hoja; la versión 2.384.92 amplía los orígenes locales admitidos a nombres definidos y tablas resueltos en cada llamada
Materializar una vista
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 los resultados a partir de la caché actual y los coloca en la FirstRow y la FirstCol de la vista; devuelve 1 si tiene éxito o -1 ante orígenes no admitidos, destinos inseguros, fallo de evaluación o una mutación del libro rechazada
La actualización y el recálculo de la hoja siguen siendo operaciones explícitas; la materialización con éxito invalida las dependencias de cálculo para que los llamadores puedan recalcular las fórmulas posteriores cuando proceda
La sobrecarga por defecto acepta las celdas de destino en blanco y las celdas sin cambios propiedad previamente de la misma vista; las celdas ocupadas sin dueño en cualquier punto dentro del rectángulo completo de salida rechazan la operación, incluidos los huecos que el escritor de resultados no rellena
if Workbook.MaterializePivotTable(Pivot, True) <> 1 then
raise Exception.Create('Existing Pivot values cannot be adopted safely');
TXLSXWorkbook.MaterializePivotTable(ATable: TXLSPivotTable; AAdoptExisting: Boolean): Integer puede adoptar explícitamente las celdas escalares existentes dentro del rectángulo anterior declarado de la vista en su primera materialización; no autoriza a reemplazar fórmulas, miembros de matriz, texto enriquecido, celdas con metadatos ni contenido fuera de ese rectángulo
Propiedad, redimensionado y movimiento
La vista retiene coordenadas exactas e instantáneas de valores con tipo para las celdas escritas; el guardado XLSX preserva esta propiedad en la definición de la tabla dinámica, de modo que las actualizaciones posteriores puedan validarla tras reabrir
Un contenido con tipo cambiado o una celda propia no vacía eliminada rechazan toda la actualización; los subtipos numéricos comparten una representación numérica canónica, mientras que el texto, los valores Boolean y los errores conservan identidades distintas
Reducir o mover un resultado limpia solo los valores propios sin cambios que ya no se producen; los objetos de celda existentes, el formato y los comentarios siguen disponibles, y las celdas no relacionadas quedan fuera del conjunto de propiedad
Cambiar FirstRow o FirstCol mueve la siguiente salida mientras las coordenadas de propiedad anteriores siguen disponibles para la limpieza; un resultado vacío limpia los valores propios y retiene una ubicación de solo ancla
Vista previa aislada
function TXLSPivotTable.MakePreview(AWriter: TlxPivotResultWriter): Integer; property TXLSPivotTable.EvaluationSourceTable: TXLSPivotTable;
TXLSPivotTable.MakePreview usa copias independientes de la caché y la vista, incluidos los marcadores de campos calculados, y las descarta tras la evaluación; el Make ordinario conserva su comportamiento existente con la caché activa
El escritor recibe offsets de fila y columna de base cero y valores con tipo; el valor devuelto sigue el recuento de celdas agregadas de Make, que es distinto del número de llamadas al escritor; una caché o escritor ausente devuelve cero, y las excepciones de evaluación o del escritor se propagan
Los predicados de registros del llamador y los filtros de propietario registrados siguen activos en las vistas previas, incluidas las selecciones de Slicer del libro; los callbacks reciben la vista evaluada temporal y su caché temporal
TXLSPivotTable.EvaluationSourceTable devuelve la vista activa para una evaluación ordinaria y la vista activa original para una vista previa; úsala cuando un callback necesite identificar una vista conectada, mientras lee los registros evaluados de la Cache temporal del callback
Los propietarios de los callbacks siguen siendo del llamador; los objetos de vista previa y sus registros no deben retenerse después de que termine el callback o la llamada de vista previa
Límites de seguridad
La materialización exige una vista y una caché registradas en el mismo libro y un origen local rectangular, de nombre definido o de tabla admitido; la resolución del origen sigue los nombres y las extensiones de tabla actuales, y los orígenes no admitidos o sin resolver se rechazan antes de la mutación
La geometría actual del origen, otras ubicaciones de tablas dinámicas, las tablas estructuradas, los rangos de resultados de consultas, las celdas combinadas y las matrices fijas o dinámicas no pueden intersecar la nueva salida ni las celdas propias antiguas que necesiten limpieza; los totales de la tabla siguen protegidos aunque estén excluidos de los registros de la caché
La validación y la preparación de la salida se ejecutan bajo una concesión de lectura, seguidas del guardián de mutación normal del libro y la comprobación de generación; una vista de libro de solo lectura inmovilizada rechaza la materialización sin reemplazar celdas ni cambiar la geometría
Los filtros deben ser de solo lectura y seguir el contrato ordinario de escritor único del libro; el aislamiento evita que los cálculos normales de la vista previa cambien la caché activa, pero las escrituras arbitrarias de callbacks a través de objetos activos capturados por separado no pueden revertirse
Esta operación materializa el diseño de resultados calculados de la biblioteca; la creación completa de diseño nativo de tablas dinámicas, la creación de UI de Slicers y la evaluación de visualización sin datos de filtro cruzado siguen siendo capacidades separadas