• Publicidad

Perl, Excel y CSV

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Perl, Excel y CSV

Notapor pbellon » 2009-10-29 05:30 @270

Hola,

la situación es la siguiente. Tengo un fichero Excel con varias hojas y tengo que convertir las distintas hojas a formato CSV para luego pasar un script a los distintos ficheros .csv y guardar esta información en una base de datos. Lo que no sé es cómo con un programa Perl puedo leer el fichero Excel y extraer a formato CSV las distintas hojas.

¿Alguna idea de cómo puede hacerse?
pbellon
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2004-10-22 06:48 @325

Publicidad

Re: Perl, excel y csv

Notapor explorer » 2009-10-29 06:14 @302

Hecho:

xls2csv

A propósito, el código de este programa es muy instructivo.
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: Perl, Excel y CSV

Notapor pbellon » 2009-11-14 06:57 @331

Lo siento pero no me entero.

Por tanto he decidido y paso a paso, y he encontrado lo siguiente: crear-programa-perl-que-lea-archivos-excel-t2125.html

Y estoy intentando hacerlo más simple, es decir, esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use lib('d:/perl/blib/lib');
use Spreadsheet::Read;
use strict;
my $ref = ReadData("test.xls");  # Leer fichero Excel
my $a1  = $ref->[1]{A1};# "\n";   # Contenido de la celda A1 de la hoja 1
print "valor: $a1\n";
print $ref->[1]{label};    # Imprime el nombre de la primera hoja
exit 0;
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


y mi Excel (test.xls) tiene lo siguiente (muy sencillito):
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
celdaa1
celdaa2
celdaa3
celdaa4
celdaa5
celdaa6
celdaa7
celdaa8
celdaa9
celdaa10
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


y la salida es la siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
valor: celdaa1
mihoja1
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

lo cual es correcto pero además me genera los siguiente errores:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Use of uninitialized value in addition (+) at d:/perl/blib/lib/Spreadsheet/Read.pm line 74.
Use of uninitialized value in addition (+) at d:/perl/blib/lib/Spreadsheet/Read.pm line 74.
Use of uninitialized value in foreach loop entry at d:/perl/blib/lib/Spreadsheet/Read.pm line 82.
Use of uninitialized value in foreach loop entry at d:/perl/blib/lib/Spreadsheet/Read.pm line 83.
Use of uninitialized value in foreach loop entry at d:/perl/blib/lib/Spreadsheet/Read.pm line 83.
Use of uninitialized value in addition (+) at d:/perl/blib/lib/Spreadsheet/Read.pm line 74.
Use of uninitialized value in addition (+) at d:/perl/blib/lib/Spreadsheet/Read.pm line 74.
Use of uninitialized value in foreach loop entry at d:/perl/blib/lib/Spreadsheet/Read.pm line 82.
Use of uninitialized value in foreach loop entry at d:/perl/blib/lib/Spreadsheet/Read.pm line 83.
Use of uninitialized value in foreach loop entry at d:/perl/blib/lib/Spreadsheet/Read.pm line 83.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


y no tengo ni idea de por qué ni qué debo revisar.
pbellon
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2004-10-22 06:48 @325

Re: Perl, Excel y CSV

Notapor explorer » 2009-11-14 15:26 @685

Con mi OpenOffice Calc v3.1.1 he credo un fichero Excel formato 97/2000/XP con el nombre y contenido que indicas.

Mi versión de Spreadsheet::Read (S::R) es
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
perl -MSpreadsheet::Read -e 'print $Spreadsheet::Read::VERSION'
0.37
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Con el programa
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. use Spreadsheet::Read;
  7.  
  8. my $ref = ReadData("test.xls");  # Leer fichero Excel
  9. my $a1  = $ref->[1]{A1};# "\n";   # Contenido de la celda A1 de la hoja 1
  10.  
  11. print "valor: $a1\n";
  12. print $ref->[1]{label};    # Imprime el nombre de la primera hoja
  13.  
  14. exit 0;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Y la salida es la misma que la tuya, salvo que no me sale ningún error.

Y mirando las líneas 74, 82 y 83 de S::R no tienen lo mismo que lo que dicen los errores. Es muy posible que no sean la misma versión. Podrías publicar las líneas de S::R entre la 70 y 86, para ver qué parte del programa es.

Apuesto a que es una versión vieja de S::R.
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Perl, Excel y CSV

Notapor pbellon » 2009-12-22 07:41 @361

Efectivamente era un problema de versión. Resuelto
pbellon
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2004-10-22 06:48 @325

Re: Perl, Excel y CSV

Notapor memita » 2010-04-15 09:55 @455

¡Hola! Me encanta este foro, es super constructivo y se encuentra información valiosa :wink: , yo, por ejemplo, encontré el xls2csv que se adapta mucho a lo que necesito inicialmente, que es leer una tabla Excel y generar un csv. Claro que esto tiene que realizarse de forma automática cada vez que en el servidor ftp haya un archivo nuevo. Pero mi primer problemita está en que no tengo mucha experiencia con Perl y ni siquiera sé dónde debo colocar los módulos que descargué. Claro que tengo instalado el ppm, pero allí no están todos los módulos que necesito para el xls2csv y por eso los descargué [de forma] manual del CPAN, descomprimí, pero ahora no sé dónde ubicarlos, así como no sé si el archivo test.xls debe estar en la misma ubicación del xls2csv. ¿Podrían ayudarme con esto?? Gracias de antemano.
memita
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2010-04-15 08:29 @395

Re: Perl, Excel y CSV

Notapor explorer » 2010-08-25 04:56 @247

Bienvenido a los foros de Perl en Español, memita.

El programa xls2csv es un poco antiguo, del año 2005. Según veo en su código, necesita de estos módulos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Getopt::Std;
use Locale::Recode;
use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::FmtUnicode;
use Text::CSV_XS;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y me parece que todos ellos los puedes descargar sin problemas con el ppm. Él se encargará de guardarles en su directorio correspondiente.

De todas formas, este programa ha sido integrado en el módulo Spreadsheet::ParseExcel::Utility, bajo la función xls2csv(). Solo necesitarás instalarte la distribución Spreadsheet::ParseExcel y ya tendrás acceso a esa función. En el manual donde explican la función, te ponen también enlaces a otros dos programas xls2csv de otros dos autores distintos.
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: Perl, Excel y CSV

Notapor pbellon » 2010-08-25 04:59 @249

Hola de nuevo. Por causas mayores tuve que abandonar este tema y ahora me veo en la necesidad de retomarlo con algunas dudas nuevas.

Mi hoja de cálculo tiene celdas combinadas y comentarios. Por supuesto todo de forma aleatoria. Las celdas combinadas sé cómo puedo solventarlo pero no sé cómo, primero, saber si tiene o no comentario, y en caso de tenerlo, extraerlo.
pbellon
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2004-10-22 06:48 @325

Re: Perl, Excel y CSV

Notapor explorer » 2010-08-25 09:56 @455

Hace unos años, cuando estaba con Windows, la mejor solución fue instalar Excel y luego usar el módulo Win32::OLE para poder acceder a ciertas propiedades que con el resto de módulos Spreadsheet::* no eran capaces de leer.

Es lo que tiene usar formatos de fichero no estandarizados...

Menos mal que eso se está acabando. Desde hace ya tiempo solo admitimos formatos aprobados por la ISO.
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 Intermedio

¿Quién está conectado?

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