HotXLS Docs

Fórmulas y objetos de hojas XLSB

La fachada de libros XLSX lee y escribe un subconjunto XLSB validado con valores con tipo, fórmulas ordinarias en caché, nombres, estilos comunes y objetos de hojas representados; el estado no representado provoca rechazo 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 exitosa define SourceFormat=xlsxExcelBinaryWorkbook, mientras que los cuatro ordinales originales de TXLSXFileFormat permanecen sin cambios y el nuevo miembro tiene el ordinal 4

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

GetConversionReport(xlsConversionExcelBinaryWorkbook) inspecciona el estado actual sin expandir el almacenamiento de celdas empaquetadas; las entradas no admitidas siguen siendo fallas obligatorias incluso para el guardado no verificado o con AllowLossy=True

Estado admitido

El reporte de conversión cubre las funciones del modelo vivo, y la validación completa del paquete sigue siendo la puerta final para referencias inválidas, registros malformados, atributos desconocidos o contenido retenido no admitido

La importación binaria retiene la fuente predeterminada 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 arreglos y arreglos dinámicos, las constantes de arreglos y las funciones que devuelven arreglos, las funciones futuras, las funciones definidas por el usuario, las referencias de libros externos y de varias hojas, el VBA, las conexiones de datos externos, 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 tablas, las fórmulas de agregación de totales, el estado de ordenamiento, el formato de tablas diferencial o personalizado, las tablas enlazadas a consultas y los mapeos XML provocan rechazo; 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 sobrescrituras de visibilidad de botones de filtro también provocan rechazo

Los criterios de filtros de hojas importados no personalizados se retienen como RawXml; las comparaciones personalizadas pueblan 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órmulas preserva la semántica y los indicadores de referencias; puede normalizar el texto de fórmulas con paréntesis y nombres de hojas entre comillas, de modo que no se promete una identidad de texto byte a byte

La salida de fórmulas exige un caché numérico, de cadena, Boolean o de error ordinario explícito; un caché faltante provoca rechazo cuando la política de guardado no recalculará, incluido 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álidos

Las propiedades de cálculo deben usar los valores predeterminados 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 subprocesos y las demás configuraciones significativas que no sean las predeterminadas provocan rechazo

Las cadenas de cálculo y los índices binarios de celdas son metadatos regenerados y no se copian a través del puente del paquete; los registros de funciones desconocidos o las relaciones siguen siendo fallas en lugar de convertirse en partes Open XML fabricadas

La entrada binaria exige la carga ansiosa de hojas completas; MetadataOnly y una lista SelectedSheets no vacía provocan rechazo antes de reemplazar el modelo existente porque la carga diferida exigiría retener un archivo convertido

Garantías de fallas 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 malformado, los modos de lectura rechazados y la cancelación de la conversión preservan los objetos existentes de hojas, el nombre de archivo, el formato de fuente y el enlace al archivo de fuente

Después de que la conversión binaria validada entra al analizador XML existente, las fallas tardías de análisis XML o de devoluciones de llamada de la aplicación siguen el ciclo de vida ordinario de apertura XML; la garantía de verificación previa no promete la reversión de escrituras arbitrarias de devoluciones de llamada

El guardado prepara el paquete binario completo; la salida a archivos usa un archivo temporal hermano y un reemplazo final, y la salida a streams legibles y con posición retiene una instantánea de byte, tamaño y posición para la reversión tras una falla 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, de modo que este backend no es un escritor de streaming de memoria acotada

Los reportes de conversión y la verificación previa retienen el almacenamiento de celdas empaquetadas, incluida una mezcla de valores empaquetados y fórmulas materializadas; el guardado exitoso puede expandir los valores empaquetados a través de la preparación existente de estilos y del escritor de hojas, de modo que la pureza del reporte no implica una operación de guardado inmutable o sin materialización

El guardado binario exitoso a archivos limpia los enlaces anteriores a fuentes XML crudas; el guardado a streams conserva el comportamiento de nombre de archivo, y la cancelación se comprueba antes de la confirmación al destino

APIs 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 está basado en cero y el llamador es dueño del validador

XlsbValidateTableXml(Data) y XlsbValidateAutoFilterXml(Data) validan el XML de objetos UTF-8 contra los mismos contratos de codificador usados por la salida del paquete; las fallas lanzan las excepciones existentes de formato o de funciones no admitidas

Estas APIs de lxXlsb conservan la propiedad del llamador; la conversión de paquetes valida y prepara todas las partes antes de reemplazar Destination desde el desplazamiento cero, y los puentes de partes núcleo usan XML UTF-8 y bytes binarios crudos

EXlsbUnsupported deriva de EXlsbFormatError y distingue el rechazo esperado del subconjunto de los datos malformados; la cancelación lanza la excepción establecida de cancelación de streams 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 desde 1980 hasta 2107; las opciones inválidas provocan rechazo antes de los cambios al destino