Documentación de HotXLS

Compatibilidad con Free Pascal y Lazarus

HotXLS es compatible con Free Pascal 3.2.2 con Lazarus/LCL en Windows Win32 y Win64, incluidas las API de libros de trabajo XLS/XLSX, las fórmulas, el formato, la lectura y escritura directas, los componentes de exportación TDataToXLS y TGridToXLS y las ayudas de representación

Núcleo de libros nativo para Linux y macOS

Consulte almacenamiento de archivos compuestos para las API de directorios con ámbito, la propiedad explícita del almacenamiento nativo, las marcas de tiempo y las claves canónicas de identificadores Classic

El perfil opcional LX_PORTABLE_CORE expone TXLSWorkbook y TXLSXWorkbook sin LCL en Linux y macOS. Los destinos nativos Linux x64 y macOS ARM64 se han compilado y ejecutado con Free Pascal 3.3.1; la guardia de versión del código fuente exige al menos 3.2.2, pero ese mínimo no afirma que se haya validado cada combinación de compilador nativo y destino

Ponga cthreads y cwstring antes de las unidades de HotXLS, añada Lib a las rutas de unidades y de inclusiones, y defina LX_PORTABLE_CORE para toda la compilación. Una aplicación de consola nativa no necesita Interfaces ni un widgetset de la LCL

Seleccione una configuración regional UTF-8 instalada en el entorno de la aplicación cuando trabaje con rutas de sistema de archivos Unicode. Una configuración regional no válida o que no sea UTF-8 puede hacer que la conversión de nombres de archivo de la RTL nativa pierda información; el asistente de validación rechaza explícitamente ese entorno en lugar de cambiar la configuración regional o adivinar una página de códigos

program NativeWorkbookExample;
{$mode delphiunicode}
uses
  cthreads, cwstring, SysUtils, lxHandleX;
var
  Workbook: TXLSXWorkbook;
begin
  Workbook:= TXLSXWorkbook.Create;
  try
    Workbook.Sheets.Add('Data').Cells[1, 1].Value:= 5;
    Workbook.Sheets[1].Cells[1, 2].Formula:= 'A1*2';
    if Workbook.Recalculate<> 1 then
      raise Exception.Create('Workbook calculation failed');
    if Workbook.SaveAs('native.xlsx')<> 1 then
      raise Exception.Create('Workbook save failed');
  finally
    Workbook.Free;
  end;
end.
ÁreaContrato del núcleo nativo
Archivos de libroCrear, abrir, editar, calcular y guardar XLS BIFF8 Classic, XLSX, el subconjunto XLSB ampliado admitido y el subconjunto ODS admitido a través de las API públicas del libro, con sus comprobaciones de conversión y límites de formato existentes. Los registros BIFF2 Classic con codificaciones CP1252 y CP932 declaradas explícitamente también se han validado mediante importación y exportación BIFF8 Unicode
Unicode y nombresEl texto del libro conserva la semántica UTF-16 y las rutas del sistema de archivos usan UTF-8 en los límites nativos. La identidad de los nombres definidos usa la normalización canónica Unicode 16 fijada y el plegado completo de mayúsculas y minúsculas del BMP, conservando símbolos, acentos, distinciones turcas y la identidad de mayúsculas de caracteres fuera del BMP con independencia de la configuración regional del host; las fórmulas calificadas conservan su ámbito exacto de hoja. El orden ordinario del texto de las hojas de cálculo sigue usando la comparación de configuración regional de la RTL nativa
InfraestructuraSe usan secciones críticas nativas, identificadores de hilo de ancho completo, hilos de trabajo reales, archivos temporales exclusivos registrados, reemplazo atómico de archivos hermanos y bytes aleatorios del sistema operativo, sin emulación de Windows
Compresión y criptografíaEl ZIP/compresión y el AES en Pascal incluidos siguen disponibles. Los archivos XLS Classic con RC4 y RC4 CryptoAPI se pueden leer y escribir de forma nativa usando bytes aleatorios del sistema operativo. La lectura nativa de OOXML cifrado usa el lector puro de archivos compuestos; escribir un archivo compuesto OOXML cifrado requiere Windows y lanza una excepción explícita de plataforma en Unix nativo
Funciones de fórmula REGEXEl backend estático PCRE2 UTF-16 fijado se compila en el destino nativo con su compilador de C. Ejecute sh Lib/thirdparty/build-pcre2-unix.sh antes de compilar aplicaciones que incluyan el motor de fórmulas; se proporcionan destinos estáticos para Linux x64 y macOS ARM64
Servicios de WindowsEl acceso al portapapeles, la activación COM de Windows, los proveedores de consulta integrados ADO/WinHTTP, la captura de geometría GDI, la decodificación de imágenes de fondo HTML y la exportación PDF heredada lanzan EXLSPlatformUnsupported en sus límites explícitos. Los proveedores de consulta personalizados y los proveedores de texto siguen siendo utilizables
Componentes heredadosEl modelo de libro Classic y el lector/escritor BIFF están disponibles en el núcleo nativo. El paquete de tiempo de ejecución de la LCL, los componentes de exportación de datasets/cuadrículas y los controles visuales siguen siendo componentes de Windows/LCL. Los métodos Classic de portapapeles, la exportación HTML y la exportación PDF heredada lanzan excepciones explícitas de plataforma en Unix nativo
Fórmulas de texto orientadas a bytesLas funciones que requieren la página de códigos ANSI/DBCS activa de Windows devuelven un resultado explícito de fórmula no admitida (#NAME?) en Unix nativo; no se elige ningún sustituto implícito de configuración regional ni de página de códigos

Los métodos de apertura y guardado conservan sus contratos normales de código de resultado y diagnóstico. Las llamadas directas en los límites de plataforma pueden lanzar EXLSPlatformUnsupported; maneje esta excepción al invocar un servicio exclusivo de Windows desde código de aplicación compartido

Validación nativa reproducible

Ejecute el asistente de validación en el huésped nativo con una cadena de herramientas de Free Pascal existente, Python 3 y un compilador de C nativo. Elija un directorio de salida nuevo o vacío fuera del checkout de fuentes, en el sistema de archivos del huésped

python3 Tests/Lazarus/run_native_core.py --fpc /path/to/fpc --output /guest-local/hotxls-validation
python3 Tests/Lazarus/run_native_core.py --fpc /path/to/fpc --config /path/to/fpc.cfg --output /guest-local/hotxls-validation-2

El asistente copia y calcula el hash de las entradas de fuentes, normaliza los nombres de archivo de las unidades Pascal en la copia privada de compilación para la búsqueda de nombres sensible a mayúsculas de FPC, compila PCRE2 localmente y ejecuta los testigos de núcleo, AES, compresión, REGEX, libros públicos e integración. Conserva manifiestos de fuentes, registros del compilador, artefactos y fallos sin cambiar el checkout, instalar herramientas ni editar la configuración del compilador. Las compilaciones de macOS ARM64 apuntan explícitamente a macOS 11 o posterior

Los testigos de integración incluyen rutas Unicode, fixtures XLSB creados por Excel, cachés de fórmulas y recálculo, aperturas repetidas, notas ODS dispersas y protección, rechazo de conversión comprobada, cancelación que preserva los destinos del llamador, búsqueda invariable de nombres con ámbito, contención de fallos de hilos de trabajo reales y bytes aleatorios criptográficos

Contratos Classic XLS nativos

Use lxHandle para el TXLSWorkbook Classic y lxHandleX para el TXLSXWorkbook. El Recalculate Classic devuelve un recuento de errores, de modo que cero significa éxito; su método Calculate devuelve un resultado de fórmula. Las asignaciones de Formula de celdas Classic exigen un = inicial. Los métodos de apertura y guardado del libro mantienen su resultado de éxito establecido de 1

La implementación nativa de almacenamiento Classic usa una jerarquía de archivos compuestos e identidades de flujos reales, conservando los ámbitos anidados, los datos MiniFAT y las cadenas DIFAT extendidas. Las cargas de los flujos se materializan y el escritor rechaza la salida agregada que supere sus límites admitidos de búfer y sector de 32 bits con signo antes de emitirla; esto no es una implementación de almacenamiento en streaming de varios gigabytes

El almacenamiento compuesto nativo proporciona operaciones directas de flujo, enumeración, metadatos y copia. La reversión de transacciones, el bloqueo de regiones, el movimiento y los modos de exclusión no admitidos devuelven errores explícitos de almacenamiento. No emula los servicios COM, de portapapeles ni GDI de Windows

Los guardados nativos Classic a archivo serializan antes de reemplazar atómicamente un archivo hermano registrado. Los guardados a flujo del llamador preparan el archivo compuesto completo antes de copiarlo en la posición original, preservando los prefijos y los fallos de cancelación antes de la confirmación. La notificación final de progreso sigue sin poder cancelarse. Las escrituras directas del asistente de almacenamiento compuesto siguen su contrato ordinario de escritura directa, no la transacción pública de guardado del libro

Las propiedades ordinarias de resumen y de resumen de documento usan conjuntos de propiedades OLE estándar acotados, con texto Unicode y marcas de tiempo FILETIME en UTC. Estos flujos de propiedades permanecen en texto sin cifrar cuando los datos del libro Classic están cifrados, y la cabecera RC4 CryptoAPI registra explícitamente esa elección. Los nombres definidos comparten las claves canónicas de identificador fijadas que usa la fachada XLSX, conservando su grafía original y su ámbito explícito de hoja de cálculo. Los datos de dibujo PNG/JPEG codificados siguen disponibles para el modelo; la conversión nativa de mapas de bits y metarchivos requiere un renderizador admitido aparte y, en caso contrario, lanza EXLSPlatformUnsupported

Compile Tests/Lazarus/HotXLSNativeClassicWorkbookSmoke.lpr con las mismas opciones del núcleo nativo y pase después Tests/Fixtures/classic-native/native-classic.xls, una ruta de salida desechable local del huésped y Tests/Fixtures/classic-native/native-classic-encrypted.xls. Los controles cubren cachés creadas por Excel, recálculo, nombres Unicode exactos, round trips en claro y cifrados, marcas de tiempo de propiedades decodificadas de forma independiente, aperturas repetidas, más de 16 MB de datos SST y preservación de la salida del llamador

Codificación de bytes BIFF heredada

TXLSWorkbook.SetCodePage selecciona la codificación de bytes explícita que usa SaveAs(..., xlExcel5), con CP1252 por defecto; importar un archivo BIFF2–BIFF5 con un registro CODEPAGE distinto de cero utilizable también selecciona esa página para los guardados heredados posteriores

Las etiquetas de celda heredadas, las constantes de texto de fórmula y las matrices, las cadenas de fórmulas cacheadas, los nombres definidos, los nombres y referencias de hojas de cálculo, los nombres de fuente, los formatos de número, los nombres de estilo, los encabezados, los pies de página y el texto ordinario de comentarios usan esa página declarada en lugar de la configuración regional del sistema operativo o de UTF-8

Las longitudes de registro y los desplazamientos del flujo de hoja de cálculo cuentan bytes codificados; los límites existentes de 255 bytes para etiquetas heredadas y literales de fórmula truncan solo en un límite de carácter completo, de modo que un carácter de dos bytes de CP932 nunca se divide; los nombres y metadatos con longitud de un byte rechazan el texto codificado más largo que su longitud representable en lugar de emitir una longitud no válida

El texto que no puede hacer round trip por la página de códigos seleccionada lanza EConvertError antes de que pueda convertirse silenciosamente en un carácter de reemplazo o de ajuste aproximado; seleccione una página que represente el texto del documento, o guarde como BIFF8 para cadenas Unicode

Las cadenas de la caché de fórmulas que abarcan registros CONTINUE se ensamblan como bytes antes de decodificar, de modo que un límite de registro puede dividir un carácter de dos bytes sin corromper el valor cacheado

Cambiar la página seleccionada reconstruye los bytes con tipos de fórmulas heredadas y de nombres definidos a partir de su modelo Unicode; los guardados BIFF8 siguen usando Unicode y su valor CODEPAGE en disco permanece en 1200

Los registros de gráficos BIFF5 importados conservan su página de códigos original para la inspección de series con tipos y de títulos adjuntos, incluso después de editar la página de códigos del libro o copiar un gráfico; guardar en una página distinta transcodifica explícitamente los SeriesText admitidos, las etiquetas cacheadas simples y las cadenas de fórmulas, los encabezados, los pies de página y los nombres de hojas externas del libro actual, en lugar de reinterpretar los bytes preservados bajo la nueva declaración

El texto de gráficos continuado, las codificaciones heredadas de hojas externas no modeladas y los registros heredados opacos de texto en bytes rechazan una migración de página de códigos con EConvertError; el texto admitido no representable también se rechaza, y el guardado público del libro preserva el destino del llamador antes de la confirmación; este contrato de texto no promete una conversión completa de la apariencia nativa de gráficos

Los nombres de estilo personalizados BIFF5 empiezan inmediatamente después de la longitud codificada de un byte, mientras que el SeriesText de BIFF5 tiene un identificador y una longitud codificada de un byte sin marca Unicode; el SeriesText de BIFF8 añade su marca Unicode, y convertir texto de gráficos admitido actualiza ese registro y la versión BOF del gráfico juntos

Los encabezados y pies de página BIFF5 de gráficos no vacíos usan una longitud codificada de un byte con un máximo de 255 bytes; los registros LABEL y STRING cacheados usan longitudes de dos bytes, mientras que los encabezados y pies de página BIFF8 usan una longitud UTF-16 de dos bytes más su marca Unicode; la migración comprueba la disposición real de cada registro y rechaza un encabezado o pie heredado demasiado grande con ERangeError antes de añadirlo

HotXLS interpreta los bytes heredados usando su página declarada en Windows, Linux y macOS; la compilación instalada Excel 16.0 build 20430 demostró de forma independiente una limitación del receptor: interpretaba los bytes heredados usando su CP936 local de Windows incluso después de cambiar únicamente el registro CODEPAGE de un archivo nativo a CP1252 o CP932, de modo que los bytes declarados correctos no garantizan un texto coincidente en esa configuración del receptor

Conserve la declaración de codificación real del documento y pruebe la aplicación receptora al distribuir BIFF5 entre configuraciones regionales distintas; el BIFF8 Unicode evita este límite concreto de interoperabilidad de bytes heredados

Esta corrección de codificación de bytes conserva el límite existente de tamaño de registro de comentarios ordinarios BIFF5; no añade autor del comentario, formato de texto enriquecido ni campos de geometría de forma al registro heredado

La edición del código fuente de módulos VBA usa la página de códigos de bytes declarada del proyecto y preserva el prefijo binario anterior al desplazamiento del código, incluidos los bytes nulos incrustados; esto cambia el texto del código fuente almacenado y no ejecuta macros

El Unicode comprimido BIFF8 con fHighByte = 0 mapea cada byte directamente a una unidad de código UTF-16 de U+0000 a U+00FF; no es CP1252, ni UTF-8, ni la página de códigos heredada del archivo, incluso cuando aparece un registro CODEPAGE no estándar en un archivo que por lo demás es BIFF8

Las fórmulas de texto nativas conservan las longitudes y posiciones UTF-16, incluidas las unidades de código de pares sustitutos; las funciones Unicode LOWER, UPPER y SEARCH, los delimitadores insensibles a mayúsculas de TEXTBEFORE/TEXTAFTER, los encabezados de campos de base de datos, los criterios insensibles a mayúsculas y las claves de texto dinámicas usan los datos de caracteres Unicode del compilador nativo en lugar de las funciones ASCII de mayúsculas y minúsculas de la configuración regional C del host, mientras que el orden ordinario de las hojas de cálculo conserva su comparación de configuración regional existente

La coincidencia de nombres locales de LET/LAMBDA nativa y la clasificación de almacenamiento de arrays locales usan el mismo manejo de mayúsculas consciente de Unicode, de modo que las contrapartes en mayúsculas y minúsculas resuelven el enlace capturado correcto y conservan la forma de su array; esto no cambia el contrato público fijado de identidad de nombres definidos

El FindText y el ReplaceText Classic insensibles a mayúsculas conservan la coincidencia de caracteres Unicode para las búsquedas literales y con comodines de Excel en FPC nativo; MatchCase sigue distinguiendo mayúsculas, el reemplazo literal conserva su comportamiento de reemplazar todo, el reemplazo con comodines conserva su comportamiento existente de extensión desde la izquierda, y las celdas de fórmula siguen excluidas

Compile Tests/Lazarus/HotXLSNativeLegacyEncodingSmoke.lpr con las opciones del núcleo nativo y pase un directorio de salida desechable seguido de Tests/Fixtures/legacy-encoding/native-biff5-cp936-chart.xls; el testigo comprueba de forma independiente los bytes declarados CP1252, CP932 y CP936, cada desplazamiento de la hoja de cálculo, los cambios de página de códigos, los límites de continuación de dos bytes, la importación BIFF8 comprimida, el cálculo de fórmulas, el texto de gráficos creado de forma nativa y la preservación del destino en guardados fallidos

Instalador completo

El instalador completo detecta Lazarus y permite la instalación sin RAD Studio. Seleccione Lazarus / Free Pascal en la página de integración con el IDE para instalar el paquete de tiempo de ejecución, las unidades de compatibilidad y los scripts de compilación; esta opción viene seleccionada por defecto cuando Lazarus es el único IDE detectado

En la página de compilación posterior a la instalación, seleccione el paquete de tiempo de ejecución de Free Pascal para Win32 o Win64. Un destino está disponible cuando se detectan su compilador y sus unidades RTL, LCL y LazUtils; aunque un destino no esté disponible, puede instalar los fuentes del paquete y compilarlos más tarde

El paquete es solo de tiempo de ejecución y se añade como dependencia del proyecto en Lazarus. El instalador no compila las demos VCL con Free Pascal

Compilación y pruebas

Abra Lib/FPC/HotXLSLaz.lpk en Lazarus y compile el paquete de tiempo de ejecución, o ejecute estos comandos desde el directorio de HotXLS

build-FPC-Lib.cmd Win64
Tests\Lazarus\Run-HotXLSLazarusSmoke.cmd Win64
build-FPC-Lib.cmd Win32
Tests\Lazarus\Run-HotXLSLazarusSmoke.cmd Win32

Establezca LAZARUS_DIR para seleccionar una instalación; FPC_EXE y LAZBUILD_EXE permiten seleccionar ejecutables explícitos del compilador y del generador de paquetes cuando sea necesario

La instalación seleccionada debe contener las unidades FPC y LCL/LazUtils compiladas para la arquitectura de destino; los resultados y la configuración del generador de paquetes se conservan en directorios separados por arquitectura

Configuración de la aplicación

Añada Lib y Lib/FPC a la ruta de búsqueda de unidades y Lib a la ruta de búsqueda de inclusiones, o añada el paquete de tiempo de ejecución como dependencia del proyecto de Lazarus

Ponga Interfaces antes de las unidades de HotXLS en la lista uses de la aplicación, incluidas las aplicaciones de consola; esto inicializa el widgetset de la LCL y la conversión UTF-8 en los límites RTL/LCL

program WorkbookExample;
{$mode delphiunicode}
uses
  Interfaces, SysUtils, lxHandleX;
var
  Workbook: TXLSXWorkbook;
begin
  Workbook:= TXLSXWorkbook.Create;
  try
    Workbook.AddSheet('Data');
    Workbook.Sheets[1].Cells[1, 1].Value:= 'Hello';
    if Workbook.SaveAs('example.xlsx')<> 1 then
      raise Exception.Create('Workbook save failed');
  finally
    Workbook.Free;
  end;
end.

Las unidades de código fuente de HotXLS seleccionan internamente la semántica Unicode de Delphi, de modo que las cadenas, los caracteres y el texto de las fórmulas conservan el comportamiento UTF-16; el código de la aplicación puede usar su modo Pascal preferido

Detalles de compatibilidad