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.
| Área | Contrato del núcleo nativo |
|---|---|
| Archivos de libro | Crear, 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 nombres | El 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 |
| Infraestructura | Se 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ía | El 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 REGEX | El 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 Windows | El 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 heredados | El 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 bytes | Las 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
- El paquete de tiempo de ejecución requiere Windows y la LCL;
TDataToXLSexporta conjuntos de datos LCL yTGridToXLSexporta unaTDBGrid, con o sin columnas explícitas, mientras que Linux, macOS, los formularios de demostración de la VCL, el visor de libros de trabajo de la VCL y el adaptador de cuadrículas DevExpress quedan fuera de este paquete - Los flujos de ZIP y de compresión usan el backend Pascal incluido y no requieren una DLL de zlib aparte
- AES usa un backend Pascal para ambas arquitecturas, incluidos los archivos XLSX protegidos con contraseña
- PNG conserva el canal alfa, EMF usa la grabación y reproducción de metarchivos de Windows, y el TIFF multipágina usa el tiempo de ejecución de GDI+ de Windows
- La lectura directa de texto acepta UTF-8 y UTF-16/UTF-32 con marca BOM, gestiona la entrada transmitida y conserva la propiedad del flujo de quien llama
- Inicialice
TXlsCsvImportOptionsconTXlsCsvImportOptions.Defaultantes de cambiar campos individuales - Las expresiones de informe y los patrones de importación de FPC usan la sintaxis Unicode de
URegExpren lugar del backend PCRE de Delphi. La entrada vacía se responde como la respondeTRegEx: un patrón que acepta una cadena vacía, como^$o.*, encuentra la coincidencia, mientras que[0-9]+no, y reemplazar una cadena vacía produce el texto de reemplazo solo cuando el patrón lo acepta; los patrones no admitidos y los patrones vacíos lanzanERegularExpressionError, que las expresiones de informe exponen comoREPORT_EXPRESSION_INVALID_REGEX