• Publicidad

Excel::Writer::XLSX - Escribir sobre ficheros Excel

Aquí encontrarás todo lo que sea específicamente acerca de módulos de Perl. Ya sea que estás compartiendo tu módulo, un manual o simplemente tienes una duda acerca de alguno.

Excel::Writer::XLSX - Escribir sobre ficheros Excel

Notapor tutoki » 2012-04-15 03:44 @197

Hola a todos, mi primer mensaje.

Os cuento:

Estoy intentando automatizar un proceso de formateo de ficheros Excel, el origen es CSV.

He estado viendo las posibilidades que hay CPAN y parece que este módulo colmaría todas mis necesidades: Excel::Writer::XLSX.

El problema (o no) es que no permite escribir sobre ficheros Excel ya existentes, pero como el origen es CSV, se me ha ocurrido que se podrían de alguna manera importar en el mismo proceso del módulo.

¿cómo lo veis?

SALUD
tutoki
Perlero nuevo
Perlero nuevo
 
Mensajes: 58
Registrado: 2012-04-15 01:53 @120

Publicidad

Re: Excel::Writer::XLSX - Escribir sobre ficheros Excel

Notapor explorer » 2012-04-15 08:11 @383

Al final de la página de manual del módulo te dan una serie de pistas para leer archivos Excel, pero, si los archivos de partida son CSV, entonces no son (aún) archivos Excel.

Puedes leer los archivos CSV con otro módulo (de los muchos que hay), y luego generarlo con el Excel::Writer::XLSX.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Excel::Writer::XLSX - Escribir sobre ficheros Excel

Notapor tutoki » 2012-04-16 02:55 @163

Efectivamente tienes razon: Son CSV.

Entonces, para que un profano (como yo) entienda el proceso.
1.- Convierto el CSV en un ¿array asociativo? Con Text::CSV::Slurp (por ejemplo).
2.- Paso ese hash a un Excel con Excel::Writer::XLSX y lo formateo (inserto un logo/imagen, coloreo celdas según una condición, etc.)

¿Hay más formas de hacerlo? En Perl, seguro...

SALUD
tutoki
Perlero nuevo
Perlero nuevo
 
Mensajes: 58
Registrado: 2012-04-15 01:53 @120

Re: Excel::Writer::XLSX - Escribir sobre ficheros Excel

Notapor explorer » 2012-04-16 04:48 @242

Ese módulo dice que es para los casos en que los CSV tengan una primera fila de cabecera. ¿Es tu caso?

Hay muchos módulos para leer CSV, desde luego. Según cada uno de ellos, te dejarán la información en una determinada etructira de datos. Luego, es cuestión de saber leerla para irla pasando al módulo que crea el Excel.

Vamos, un programa de transformación de datos de toda la vida.

Incluso podríamos sospechar que... debería ya estar creado...

Si entramos en Google y buscamos por las palabras 'perl', 'CSV', y 'XLSX', nos llevaremos la sorpresa de que la mayor parte de los mensajes hablan de justo lo contrario (pasar de xlsx a csv), ya que, como es normal hoy en día, hay pocas personas que quieran seguir trabajando con los formatos propietarios de Micro$oft, y busquen soluciones más estándares, como CSV u Opendocument :twisted:

Incluso en el Spreadsheet::XLSX::Utility2007, viene la función xls2csv, pero no al revés :lol:

Pero bueno, hacerlo uno mismo es sencillo. Tienes un ejemplo mínimo en Excel::Writer::XLSX::Examples. Busca en la hoja por 'csv', y te saltará al ejemplo sales.pl, donde verás que, simplemente, hace un bucle por las líneas del csv (incluido al final del propio programa, en la sección DATA), separando los campos por las comas, y guardando la información en un array de arrays, para luego llevarlo a la hoja.

No me gusta la notación que usa... En vez de @$sale[0] es mejor usar $sale->[0] .
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Excel::Writer::XLSX - Escribir sobre ficheros Excel

Notapor tutoki » 2012-04-19 17:15 @760

Buenas,

Pues aquí estoy pegando con módulo Excel::Writer::XLSX.

He modificado la entrada de datos para que lea de mi fichero CSV pero no sé por qué solo me transforma o al menos así se refleja en el resultado la última fila.

Lo subo en un anexo a ver si...

Gracias de antemano.
Adjuntos
exelator.pl
(2.52 KiB) 154 veces
tutoki
Perlero nuevo
Perlero nuevo
 
Mensajes: 58
Registrado: 2012-04-15 01:53 @120

Re: Excel::Writer::XLSX - Escribir sobre ficheros Excel

Notapor explorer » 2012-04-19 18:06 @796

La línea 84, que es la que incrementa $row, está comentada.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Excel::Writer::XLSX - Escribir sobre ficheros Excel

Notapor tutoki » 2012-04-20 13:33 @606

¡Bingo! Se me fue la mano con los comentados. Muchas gracias. Voy a darle un poco más de brillo al Excel con los formatos condicionales.

Gracias de nuevo.

SALUD...
tutoki
Perlero nuevo
Perlero nuevo
 
Mensajes: 58
Registrado: 2012-04-15 01:53 @120

Re: Excel::Writer::XLSX - Escribir sobre ficheros Excel

Notapor tutoki » 2012-04-21 03:00 @166

Bien, esto va cogiendo forma, he añadido otro módulo para indicar la fecha de creación dentro del excel y formateado texto, colores, insertado imágenes, lo anexo (versión beta;-)).

Una pregunta, las 'ñ' ( en el texto) se las traga, ¿hay alguna manera de indicar tipo/formato utf-8 o algo así?


SALUD...
Adjuntos
excelator.tar.gz
(13.09 KiB) 141 veces
tutoki
Perlero nuevo
Perlero nuevo
 
Mensajes: 58
Registrado: 2012-04-15 01:53 @120

Re: Excel::Writer::XLSX - Escribir sobre ficheros Excel

Notapor explorer » 2012-04-21 05:08 @255

En la misma página de ejemplos enlazada antes, hay varios ejemplos de cómo usar los caracteres utf-8, tanto directamente indicados en el código, como leyéndolos de un archivo externo.

Para esto último lo que hay que hacer es informar a Perl que lo que vamos a leer está codificado de esa manera, con una capa E/S en open(), por ejemplo.

Mira en la página de ejemplos. Verás que los últimos traen ejemplos de Unicode. Uno de ellos es para leer un texto en Polaco, codificado en utf-8.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Módulos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados