Documentación de HotXLS

Fórmulas y objetos de hoja XLSB

La fachada del libro XLSX lee y escribe un subconjunto XLSB validado con valores con tipo, fórmulas ordinarias en caché, nombres, estilos comunes y objetos de hoja representados; el estado no representado se rechaza antes de la salida al destino

Abrir y guardar

if Workbook.Open('values.xlsb') <> 1 then
  raise Exception.Create('XLSB input is unsupported or invalid');
if Workbook.SaveAsChecked('values-copy.xlsb', xlsxExcelBinaryWorkbook) <> 1 then
  raise Exception.Create('XLSB output is unsupported or failed');

Open detecta el contenido y el tipo registrado de la parte del libro; la entrada binaria con éxito establece SourceFormat=xlsxExcelBinaryWorkbook, mientras que los cuatro ordinales originales de TXLSXFileFormat siguen sin cambiar y el nuevo miembro tiene el ordinal 4

Las sobrecargas de SaveAs y SaveAsChecked de archivo y stream aceptan el formato binario explícitamente; el guardado por defecto sigue seleccionando el formato ordinario de libro Open XML sin importar la extensión del nombre de archivo

GetConversionReport(xlsConversionExcelBinaryWorkbook) examina el estado actual sin expandir el almacenamiento de celdas empaquetadas; las entradas no admitidas siguen siendo fallos obligatorios incluso para el guardado sin comprobación o con AllowLossy=True

Estado admitido

El informe de conversión cubre las características del modelo vivo, y la validación completa del paquete sigue siendo la puerta final para referencias no válidas, registros mal formados, atributos desconocidos o contenido retenido no admitido

La importación binaria retiene la fuente por defecto explícita del archivo y los formatos numéricos integrados admitidos, incluidas las celdas en blanco con estilo; los formatos numéricos dependientes de la configuración regional exigen un código de formato explícito para que el lector no adivine el formato regional

Límites explícitos

Los registros de fórmulas compartidas, la propiedad de arrays y arrays dinámicos, las constantes de matriz y las funciones que devuelven matrices, las funciones futuras, las funciones definidas por el usuario, las referencias a libros externos y a varias hojas, VBA, las conexiones de datos externas, las tablas dinámicas y los Slicers, los gráficos y dibujos, los comentarios y el texto enriquecido, la validación, el formato condicional y los metadatos avanzados de página o extensión quedan fuera de este backend

Las columnas calculadas de tabla, las fórmulas de agregación de totales, el estado de ordenación, el formato de tabla diferencial o personalizado, las tablas vinculadas a consultas y los mapeos XML se rechazan; los filtros de color, icono, dinámicos y de grupos de fechas, los criterios personalizados nativos Boolean con tipo, los criterios personalizados nativos de cadena con apariencia numérica y las anulaciones de visibilidad del botón de filtro también se rechazan

Los criterios de filtro de hoja importados no personalizados se retienen como RawXml; las comparaciones personalizadas rellenan las propiedades existentes de criterios con tipo, mientras que los valores seleccionados y la selección en blanco siguen siendo un criterio respaldado por XML en lugar de una nueva API con tipo de listas de valores

La conversión de tokens de fórmula preserva la semántica y las marcas de referencia; puede normalizar el texto de la fórmula con paréntesis y nombres de hoja entre comillas, así que no se promete una identidad de texto byte a byte

La salida de fórmulas exige una caché explícita numérica, de cadena, Boolean o de error ordinaria; una caché ausente se rechaza cuando la política de guardado no va a recalcular, incluidos xrmManual y un grafo de dependencias limpio con xrmIfDirty; las aplicaciones pueden llamar a Recalculate o seleccionar xrmAlways antes de guardar, y la cadena vacía, False y el cero numérico son cachés válidas

Las propiedades de cálculo deben usar los valores por defecto admitidos; el cálculo manual, la iteración, la precisión reducida, el modo de referencia alternativo, el cálculo forzado o incompleto, la configuración explícita de hilos y otros ajustes significativos distintos de los predeterminados se rechazan

Las cadenas de cálculo y los índices binarios de celdas son metadatos regenerados y no se copian a través del puente de paquetes; los registros o relaciones de características desconocidas siguen siendo fallos en lugar de convertirse en partes Open XML fabricadas

La entrada binaria exige la carga anticipada de la hoja completa; MetadataOnly y una lista SelectedSheets no vacía se rechazan antes de reemplazar el modelo existente porque la carga diferida requeriría un archivo convertido retenido

Garantías de fallo y propiedad

Los paquetes binarios se validan y convierten antes de que el analizador XML ordinario restablezca el libro; la entrada no admitida, el contenido binario mal formado, los modos de lectura rechazados y la cancelación de la conversión preservan los objetos de hoja existentes, el nombre de archivo, el formato de origen y el enlace al archivo de origen

Después de que la conversión binaria validada entra en el analizador XML existente, los fallos tardíos de análisis XML o de callbacks de la aplicación siguen el ciclo de vida ordinario de apertura XML; la garantía de comprobación previa no promete el rollback de escrituras arbitrarias de callbacks

El guardado prepara el paquete binario completo; la salida a archivo usa un archivo temporal hermano y un único reemplazo final, y la salida a stream legible y con posicionamiento retiene una instantánea de bytes, tamaño y posición para el rollback tras un fallo de confirmación

LastSaveUsedStreaming=False refleja la preparación binaria completa incluso cuando el escritor XML intermedio hace streaming; la memoria incluye las partes convertidas y el paquete completo, así que este backend no es un escritor con streaming de memoria acotada

Los informes de conversión y la comprobación previa retienen el almacenamiento de celdas empaquetadas, incluida una mezcla de valores empaquetados y fórmulas materializadas; el guardado con éxito puede expandir los valores empaquetados a través de la preparación de estilos y el escritor de hojas existentes, así que la pureza del informe no implica una operación de guardado inmutable o sin materialización

El guardado binario a archivo con éxito limpia los enlaces de origen XML en bruto anteriores; el guardado a stream conserva el comportamiento de nombre de archivo, y la cancelación se comprueba antes de la confirmación al destino

API de conversión de paquetes

procedure XlsbToOpenXml(Source: TZipArchive; Destination: TStream;
  CancelCheck: TXLSStreamCancelCheck = nil;
  EntryCompressionLevel: Integer = -1; EntryFixedDate: TDateTime = 0);
procedure OpenXmlToXlsb(Source: TZipArchive; Destination: TStream;
  CancelCheck: TXLSStreamCancelCheck = nil;
  EntryCompressionLevel: Integer = -1; EntryFixedDate: TDateTime = 0);
function XlsbStylesToXml(const Data: AnsiString): AnsiString;
function XlsbStylesFromXml(const Data: AnsiString): AnsiString;
function XlsbStringsToXml(const Data: AnsiString): AnsiString;
function XlsbStringsFromXml(const Data: AnsiString): AnsiString;

TXlsbFormulaValidator.Create(WorkbookXml) valida el contexto de nombres del libro y Validate(FormulaText, SheetIndex) valida una fórmula sin acceso a celdas de la hoja; SheetIndex es de base cero y quien llama es propietario del validador

XlsbValidateTableXml(Data) y XlsbValidateAutoFilterXml(Data) validan el XML de objetos UTF-8 contra los mismos contratos de codificador que usa la salida del paquete; los fallos lanzan las excepciones existentes de formato o de característica no admitida

Estas API de lxXlsb conservan la propiedad de quien llama; la conversión del paquete valida y prepara todas las partes antes de reemplazar Destination desde el desplazamiento cero, y los puentes de partes core usan XML UTF-8 y bytes binarios en bruto

EXlsbUnsupported deriva de EXlsbFormatError y distingue el rechazo esperado del subconjunto de los datos mal formados; la cancelación lanza la excepción establecida de cancelación de stream antes de la confirmación

La compresión acepta de -1 a 9, y la fecha fija acepta cero o una fecha finita representable en DOS de 1980 a 2107; las opciones no válidas se rechazan antes de cambiar el destino