Actualización transaccional del caché de tablas dinámicas
La versión 2.384.92 actualiza fuentes locales rectangulares, de nombres definidos y de tablas de tablas dinámicas sin cambiar los objetos de campos existentes, los objetos de elementos compartidos ni los índices lógicos de miembros; todas las vistas de tablas dinámicas que comparten el caché siguen refiriéndose a los mismos miembros
Actualización del libro
Workbook.Recalculate;
if Workbook.RefreshPivotCache(Pivot.CacheId) <> 1 then
raise Exception.Create('Pivot cache refresh failed');
TXLSXWorkbook.RefreshPivotCache devuelve 1 tras una actualización exitosa y -1 cuando el caché, la fuente, el esquema o los valores de la fuente no pueden actualizarse; lee los valores actuales de las celdas, así que recalcule primero el libro cuando las fórmulas de la fuente necesiten evaluación
Una fuente rectangular usa una hoja de cálculo local existente y una fila de encabezados; SourceFirstRow, SourceFirstCol, SourceLastRow y SourceLastCol usan coordenadas inclusivas basadas en uno, y la primera fila aporta los nombres de los campos
Fuentes de nombres definidos y de tablas
Cuando SourceIsNamedRange=True, SourceName identifica un nombre definido o un nombre de tabla o de visualización único; la actualización y la materialización resuelven su geometría actual en cada llamada preservando la identidad de la fuente almacenada en el caché
SourceRangeSheet aporta el contexto de hoja de cálculo para un nombre definido local; ese ámbito tiene precedencia sobre un nombre de libro con la misma ortografía, y de lo contrario la resolución usa el ámbito del libro sin elegir un nombre local no relacionado
Un nombre definido debe contener un rectángulo absoluto calificado explícitamente por hoja de cálculo; los nombres de hojas entre comillas y Unicode están admitidos, mientras que las referencias relativas, las uniones, los alias, las fórmulas, las referencias externas y las colisiones ambiguas entre nombre y tabla provocan rechazo antes de la mutación
Una tabla debe conservar una fila de encabezados; los registros siguen su extensión actual y excluyen una fila de totales real, mientras que las comprobaciones de colisión protegen la tabla completa incluidos sus totales; una tabla con solo encabezados aporta cero registros
La pertenencia física de totales sigue el totalsRowCount almacenado, cuyo valor ausente significa cero; una pista de UI de totales por sí sola no elimina una fila de datos, y el guardado escribe la pertenencia real de forma explícita
Para una fila de totales escrita por el autor, aporte metadatos válidos de totales de columna y contenido de hoja de cálculo mediante ColumnTotalsRowLabels, ColumnTotalsRowFunctions y ColumnTotalsRowFormulas; definir TotalsRowShown=True no crea fórmulas de totales ni coerciona valores de celdas
Los movimientos de hojas conservan el ámbito local de nombres, y los renombrados de hojas actualizan las referencias locales admitidas y el contexto de la fuente de la tabla dinámica preservando las referencias externas no relacionadas y el XML de caché importado opaco; el guardado de nombres definidos elimina un signo igual inicial opcional de la fórmula sin cambiar la fórmula en memoria
Los encabezados coinciden con los campos existentes de la base de datos por nombre sin distinguir mayúsculas; reordenar las columnas de la fuente preserva los índices lógicos de campos, mientras que los campos de fuente duplicados, renombrados, ausentes o extra se rechazan; los encabezados vacíos usan el fallback existente FieldN
Las celdas de fuente vacías permanecen vacías sin agregarse a la colección de celdas de la hoja; las fuentes con solo encabezados producen cero registros conservando los miembros históricos
Miembros estables y vistas compartidas
Los elementos compartidos existentes conservan sus índices e identidades de objetos, y los nuevos valores con tipo se agregan al dominio; reordenar, eliminar y reintroducir más tarde miembros de la fuente preserva los elementos ocultos, las selecciones de página, las referencias de elementos base y las asignaciones de grupos explícitas que ya identifican esos miembros
Todas las vistas que comparten un caché ven los registros actualizados; los miembros históricos ausentes permanecen en el dominio del caché pero no crean filas agregadas por sí mismos, porque TXLSPivotTable.Make construye los resultados a partir de los registros actuales
Los miembros históricos se retienen sin importar MissingItemsLimit; esta ruta de actualización no purga los miembros ausentes, no aplica un límite de miembros retenidos ni renumera los índices de selección
Los valores numéricos, de fecha, Boolean, de texto, en blanco y de errores representables conservan sus tipos durante la actualización y el guardado XLSX; los indicadores de contenido de elementos compartidos y los límites representables se recalculan a partir del dominio retenido y del recién agregado
El guardado completa las listas de miembros actualizadas de las vistas antes de los elementos de subtotales finales preservando el orden existente, los indicadores ocultos y las extensiones de diseño importadas; las selecciones de página se mapean entre los miembros lógicos del caché y las posiciones almacenadas en cada vista, de modo que las listas de miembros reordenadas siguen seleccionando el mismo miembro tras reabrir
Campos calculados y agrupados
Los campos calculados no consumen columnas de la fuente; sus nombres, fórmulas y dominios de elementos compartidos permanecen disponibles, mientras que cada registro actualizado comienza con un marcador de posición vacío para esos campos; Make evalúa las fórmulas calculadas admitidas a partir de los valores actuales de la fuente
Los registros del caché XLSX almacenan únicamente campos de base de datos; el guardado y la reapertura preservan la alineación de columnas de la fuente incluso cuando los campos calculados aparecen entre campos de base de datos
La agrupación numérica y de fechas sobre un campo de fuente puede aceptar nuevos miembros; la agrupación discreta explícita acepta miembros existentes reordenados pero rechaza un miembro nuevo sin asignación explícita, preservando el caché anterior completo
La versión 2.384.94 reconstruye los campos agrupados derivados fijos admitidos a partir de enlaces base/padre validados; la expansión automática del dominio, los miembros discretos sin mapear y los campos de propiedades de miembros provocan rechazo transaccional, mientras que las fuentes externas y OLAP permanecen fuera del contrato de fuentes locales; consulte los límites del caché agrupado
Actualizaciones atómicas y actualización con devoluciones de llamada
La validación de la fuente, la lectura, la conversión de tipos, la asignación de registros y la búsqueda de miembros terminan en datos de preparación desacoplados; una falla deja intactos los manejadores vivos de campos y elementos, los registros, los metadatos, el estado crudo de repetición y todas las vistas compartidas
El éxito reemplaza los búferes de registros y de búsqueda, deshabilita la repetición cruda del caché, actualiza RefreshedDate y define RefreshOnLoad=False; el guardado usa el caché con tipo actualizado en lugar de repetir su representación cruda anterior
El código independiente o respaldado por Classic puede usar la misma implementación de preparación mediante TXLSPivotCache.RefreshFromSource; su lector recibe coordenadas de fuente basadas en uno y devuelve un Variant, y las fallas de validación o del lector lanzan una excepción
TlxPivotSourceCellValue = function(ARow, ACol: Integer): Variant of object;
procedure TXLSPivotCache.RefreshFromSource(AValueReader: TlxPivotSourceCellValue); procedure TXLSPivotCache.RefreshFromSource(AValueReader: TlxPivotSourceCellValue; AFirstRow, AFirstCol, ALastRow, ALastCol: Integer);
La sobrecarga de un argumento exige un rectángulo local concreto en el caché; la sobrecarga de límites explícitos lee un rectángulo local resuelto por el llamador sin cambiar la identidad de la fuente nombrada o de tabla del caché, y los llamadores siguen siendo responsables de resolver esa identidad correctamente
La actualización del caché actualiza los datos del caché; las aplicaciones pueden llamar a Make con su propio escritor de resultados o a MaterializePivotTable para una salida de hoja protegida; la selección con tipo de Slicers de tablas dinámicas no OLAP está disponible para los enlaces importados admitidos, mientras que el diseño nativo completo sigue siendo un trabajo separado