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
- Hojas de cálculo ordinarias, nombres y cadenas Unicode, números, valores Boolean, celdas en blanco y en blanco con estilo, y valores de error ordinarios representables
- Entradas de cadenas compartidas y en línea, registros nativos compactos numéricos y de celdas cortas, visibilidad de hojas, el indicador de sistema de fechas, y vistas y selecciones ordinarias de libros y hojas
- Fuentes comunes, rellenos con patrones, bordes de los cuatro lados, formatos numéricos, referencias de formatos de celda, indicadores de alineación y protección, y colores RGB, de tema e indexados representados
- Alturas de filas, anchos de columnas, indicadores de dimensiones admitidos y márgenes de página
- Fórmulas ordinarias de celdas que usan tokens heredados de funciones admitidos, operadores escalares, referencias A1, referencias de una sola hoja del mismo libro y nombres de libro u hoja, con cachés numéricos, de cadenas, Boolean y de errores ordinarios
- Nombres definidos globales y con ámbito de hoja, indicadores y comentarios de nombres ocultos, celdas combinadas, hipervínculos ordinarios externos e internos, paneles divididos o congelados y selecciones de paneles
- Rangos de AutoFilter, comparaciones personalizadas escalares con uno o dos criterios AND/OR, y listas arbitrarias de valores seleccionados con una selección en blanco opcional
- Tablas ordinarias de hojas con identidad, visibilidad de rango, encabezado y fila de totales, identidad y leyendas de columnas, etiquetas literales de fila de totales, criterios de AutoFilter representados e indicadores de estilos de tabla integrados
- Compresión ZIP configurada y marcas de tiempo ZIP deterministas a través de las opciones existentes del libro
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