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
- Hojas 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 shared strings e inline strings, registros nativos compactos numéricos y de celda corta, visibilidad de hoja, marca de sistema de fechas, y vistas y selecciones ordinarias de libro y hoja
- Fuentes comunes, rellenos de patrón, bordes de borde, formatos numéricos, referencias de formato de celda, marcas de alineación y protección, y colores RGB, de tema e indexados representados
- Alturas de fila, anchuras de columna, marcas de dimensión admitidas y márgenes de página
- Fórmulas de celda ordinarias que usan tokens de función heredados admitidos, operadores escalares, referencias A1, referencias de una sola hoja del mismo libro y nombres de libro u hoja, con cachés numéricas, de cadena, Boolean y de error ordinarias
- Nombres definidos globales y con ámbito de hoja, marcas y comentarios de nombre oculto, celdas combinadas, hipervínculos externos e internos ordinarios, paneles divididos o inmovilizados y selecciones de panel
- 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 de hoja ordinarias con identidad, rango, visibilidad de encabezado y fila de totales, identidad y títulos de columna, etiquetas literales de fila de totales, criterios de AutoFilter representados y marcas de estilo de tabla integrado
- Compresión ZIP configurada y marcas de tiempo ZIP deterministas mediante las opciones existentes del libro
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