Documentación de HotXLS

Actualización transaccional de la caché de tabla dinámica

La versión 2.384.92 actualiza los orígenes de tabla dinámica locales rectangulares, de nombre definido y de tabla sin cambiar los objetos de campo existentes, los objetos de elemento compartido ni los índices lógicos de miembros; todas las vistas de tabla dinámica que comparten la 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 con éxito y -1 cuando la caché, el origen, el esquema o los valores del origen no pueden actualizarse; lee los valores actuales de las celdas, así que recalcula primero el libro cuando las fórmulas del origen necesiten evaluación

Un origen rectangular usa una hoja local existente y una fila de encabezado; SourceFirstRow, SourceFirstCol, SourceLastRow y SourceLastCol usan coordenadas inclusivas de base uno, y la primera fila aporta los nombres de campo

Orígenes de nombre definido y de tabla

Cuando SourceIsNamedRange=True, SourceName identifica un nombre definido o un nombre de tabla único o un nombre para mostrar; la actualización y la materialización resuelven su geometría actual en cada llamada preservando la identidad del origen almacenada en la caché

SourceRangeSheet aporta el contexto de hoja para un nombre definido local; ese ámbito tiene prioridad sobre un nombre de libro con la misma ortografía, y en caso 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; se admiten los nombres de hoja entre comillas y Unicode, mientras que las referencias relativas, las uniones, los alias, las fórmulas, las referencias externas y las colisiones ambiguas de nombre/tabla se rechazan antes de la mutación

Una tabla debe conservar una fila de encabezado; 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 de solo encabezado 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 al guardar se escribe la pertenencia real de forma explícita

Para una fila de totales escrita por el autor, aporta metadatos válidos de totales de columna y contenido de hoja mediante ColumnTotalsRowLabels, ColumnTotalsRowFunctions y ColumnTotalsRowFormulas; establecer TotalsRowShown=True no crea fórmulas de totales ni coacciona valores de celda

Los movimientos de hoja conservan el ámbito local de nombres, y los renombrados de hoja actualizan las referencias locales admitidas y el contexto de origen de la tabla dinámica preservando las referencias externas no relacionadas y el XML opaco de caché importada; el guardado de nombres definidos elimina un signo igual inicial opcional de fórmula sin cambiar la fórmula en memoria

Los encabezados coinciden con los campos de base de datos existentes por nombre sin sensibilidad a mayúsculas; reordenar las columnas del origen preserva los índices lógicos de campo, mientras que los campos del origen duplicados, renombrados, ausentes o extra se rechazan; los encabezados vacíos usan la alternativa existente FieldN

Las celdas de origen vacías permanecen vacías sin añadirse a la colección de celdas de la hoja; los orígenes de solo encabezado producen cero registros conservando los miembros históricos

Miembros estables y vistas compartidas

Los elementos compartidos existentes conservan sus índices e identidades de objeto, y los nuevos valores con tipo se añaden al dominio; reordenar, eliminar y reintroducir más tarde miembros del origen preserva los elementos ocultos, las selecciones de página, las referencias de elemento base y las asignaciones de grupo explícitas que ya identifican esos miembros

Todas las vistas que comparten una caché ven los registros actualizados; los miembros históricos ausentes permanecen en el dominio de la 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 con independencia de MissingItemsLimit; esta vía de actualización no purga 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 error 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 añadido

El guardado completa las listas de miembros de las vistas actualizadas antes de los elementos de subtotal finales preservando el orden existente, los indicadores de ocultación y las extensiones de diseño importadas; las selecciones de página se mapean entre los miembros lógicos de la 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 del origen; sus nombres, fórmulas y dominios de elementos compartidos permanecen disponibles, mientras que cada registro actualizado empieza con un marcador vacío para esos campos; Make evalúa las fórmulas calculadas admitidas a partir de los valores actuales del origen

Los registros de caché XLSX almacenan solo campos de base de datos; guardar y reabrir preserva la alineación de columnas del origen incluso cuando hay campos calculados entre campos de base de datos

La agrupación numérica y de fechas sobre un campo del origen 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 toda la caché anterior

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 de dominios, los miembros discretos sin mapear y los campos de propiedad de miembro se rechazan transaccionalmente, mientras que los orígenes externos y OLAP siguen fuera del contrato de orígenes locales; consulta los límites de la caché agrupada

Actualizaciones atómicas y actualización mediante callbacks

La validación del origen, 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; un fallo deja intactos los manejadores de campos y elementos activos, los registros, los metadatos, el estado de repetición cruda y todas las vistas compartidas

El éxito reemplaza los búferes de registros y de búsqueda, desactiva la repetición cruda de la caché, actualiza RefreshedDate y establece RefreshOnLoad=False; al guardar se usa la caché con tipo actualizada 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 del origen de base uno y devuelve un Variant, y los fallos 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 la caché; la sobrecarga de límites explícitos lee un rectángulo local resuelto por el llamador sin cambiar la identidad del origen con nombre o de tabla de la caché, y los llamadores siguen siendo responsables de resolver esa identidad correctamente

La actualización de la caché actualiza los datos de la 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 tabla dinámica que no son OLAP está disponible para las vinculaciones importadas admitidas, mientras que el diseño nativo completo sigue siendo trabajo aparte