Crear Archivos Excel en Unix

by Gabriel Gasparolo on 22/02/2006 · 1 comment

Para crear archivos Excel en Unix utilizo un truco que funciona para versiones de Microsoft Excel desde 95 en adelante. Consiste en crear un archivo HTML con los datos guardados en una tabla y con el siguiente meta tag:

<meta content="application/vnd.ms-excel" http-equiv="content-type" />

Al transmitir este archivo a un cliente Windows con la extensión .xls, el archivo es reconocido por Microsoft Excel quien lo traduce de manera silenciosa.

El problema es que para archivos demasiado grandes –archivos con más de 10000 registros– la conversión de HTML a Excel toma demasiados recursos del PC.

Procesamiento de Archivos de Texto en Unix

Desde que trabajo con DOC1 he tomado la buena costumbre de separar los campos de los archivos con el caracter ‘|’ pipeline. Esto asegura, en cierta forma y no siempre, que el contenido de los campos no interfiera con el algoritmo de interpretación del archivo.

Ejemplo

Con un archivo de texto de tres campos separados por el caracter ‘|’ pipeline se puede crear fácilmente un archivo Excel utilizando solo AWK:

awk '
BEGIN {
	FS="|"
	printf("<html><meta http-equiv=\"content-type\"
	content=\"application/vnd.ms-excel\"/>");
	printf("<body><table bgcolor=\"white\" border=\"1\"><tr>");
	printf("<th bgcolor=\"navy\"><font color=\"white\">NOMBRE</font></th>");
	printf("<th bgcolor=\"navy\"><font color=\"white\">TELEFONO</font></th>");
	printf("<th bgcolor=\"navy\"><font color=\"white\">EMAIL</font></th>");
	printf("</tr>");
}
{
	printf("<tr>");
	printf("<td>%s</td><td>%s</td><td>%s</td>", $1, $2, $3);
	printf("</tr>");
}
END {
	printf(" </table> </body> </html>");
} contactos.txt > contactos.xls

Esto generará un archivo Excel con tres columnas y la primera fila con los tí­tulos en fondo azul y el texto de color blanco.



{ 1 comment… read it below or add one }

1 ggasp February 23, 2006 at 2:55 pm

Rodriguez Victor Alberto wrote:

> O podés hacerlo en Perl con el módulo Spreadsheet::WriteExcel o similares :-D

Previous post:

Next post: