jueves, agosto 29, 2013

Manipulación de Excel desde FreePascal-Lazarus



Primer post desde el 12 de Julio. Creo que como paréntesis ya está bien. Ya de vuelta en el trabajo he tenido que programar una utilidad para revisar contenido borrable de las unidades de red. He elegido FreePascal como lenguaje y Lazarus como IDE de desarrollo.

¿Los motivos?
  1. Creo que lo iba a hacer más rápido en Pascal que en C++.
  2. En Pascal tengo todas las funciones y procedimientos necesarios desde el minuto 0. No voy a tener que buscar librerías por ahí. (al menos no sin contar con la ayuda de la comunidad de FreePascal-Lazarus).
  3. He podido comprobar que la documentación de FreePascal-Lazarus es muy completa. Esto es lo que más miedo me daba, junto a la posibilidad de que hubiera funciones, procedimientos, librerías inacabados, o con bug-s (cosa que no ha ocurrido).
Vamos al meollo: Queremos que nuestro programa Pascal sea capaz de generar un fichero Excel (mi versión es la 2010 y ha funcionado bien), y de guardar datos en él. La versión de Lazarus que me he bajado es la 1.0.12.

PRIMERO.-Necesitamos descargar el paquete fpspreadsheet_pkg
En SourceForge.net tenemos la última versión: http://sourceforge.net/projects/lazarus-ccr/files/FPSpreadsheet/

SEGUNDO.-Se abre el paquete dentro del IDE Lazarus. Para ello tenemos que ir al menú PAQUETE, opción "ABRIR ARCHIVO DE PAQUETE".


TERCERO.-Le damos al botón COMPILAR y ya podemos darle a USAR, AGREGAR AL PROYECTO. De esta forma ya podemos utilizar los procedimientos y funciones para crear o acceder a un fichero Excel.

CUARTO.-EJEMPLO DE CREACIÓN DE UN EXCEL CON ALGUNOS VALORES.

Declaramos estas variables:
  • LibroExcel: TsWorkbook; 
  • HojaExcel: TsWorksheet;
Inicializamos las mismas: 
  • LibroExcel:= TsWorkbook.Create; 
  • HojaExcel:= LibroExcel.AddWorksheet('Resultado');
Damos valores a celdas:
Según sea el tipo de dato hay que usar un procedimiento diferentes: WriteUTF8Text, WriteNumber, etc. El primer parámetro que pasamos es el número de fila Excel, el segundo es el número de columna, y el tercero es el dato que escribimos.
  • HojaExcel.WriteUTF8Text(fila, 0, directorio);
  • HojaExcel.WriteNumber(fila, 1, numeroDeFicheros);
          LibroExcel.WriteToFile('result-unidad-' + unidad + format('%d-%d-%d ',[dd,mm,yy])+ STR_EXCEL_EXTENSION, true);


Escribimos todo en un fichero Excel. El primer parámetro es el nombre del fichero y el segundo es TRUE o FALSE dependiendo si queremos sobreescribir el fichero en caso de que exista (true), o no (false).

  • LibroExcel.WriteToFile('resultado.xls', true);
Saludos.

P.D.: Documentación del uso de los procedimientos y funciones del paquete este enlace de freepascal.org: http://wiki.freepascal.org/FPSpreadsheet