Página 1 de 1

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

NotaPublicado: 2012-04-15 03:44 @197
por tutoki
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

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

NotaPublicado: 2012-04-15 08:11 @383
por explorer
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.

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

NotaPublicado: 2012-04-16 02:55 @163
por tutoki
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

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

NotaPublicado: 2012-04-16 04:48 @242
por explorer
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] .

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

NotaPublicado: 2012-04-19 17:15 @760
por tutoki
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.

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

NotaPublicado: 2012-04-19 18:06 @796
por explorer
La línea 84, que es la que incrementa $row, está comentada.

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

NotaPublicado: 2012-04-20 13:33 @606
por tutoki
¡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...

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

NotaPublicado: 2012-04-21 03:00 @166
por tutoki
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...

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

NotaPublicado: 2012-04-21 05:08 @255
por explorer
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.