Página 2 de 2

Re: Problemas al leer un archivo xlsx

NotaPublicado: 2012-07-18 05:52 @286
por explorer
Prueba este programa, dumpxlsx:

Sintáxis: (dumpxlsx) [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. # Paul
  3. #use strict;
  4.  
  5. use Text::Iconv;
  6. my $convertor = Text::Iconv -> new("utf-8", "windows-1251");
  7.  
  8. use lib "Spreadsheet-XLSX-0.13/lib/";
  9. #use lib "Spreadsheet-XLSX-0.13_updated/lib/";
  10. use Spreadsheet::XLSX;
  11.  
  12.  
  13. sub dump_sheet($) {
  14.    my $Path = $_[0];
  15.    print "Dumping workbook '$Path'\n";
  16.    my $oBook = Spreadsheet::XLSX -> new($Path, $convertor);
  17.    foreach my $sheet (@{$oBook -> {Worksheet}}) {
  18.       printf("  Dumping sheet %s\n", $sheet->{Name});
  19.       $sheet -> {MaxRow} ||= $sheet -> {MinRow};
  20.       foreach my $row ($sheet -> {MinRow} .. $sheet -> {MaxRow}) {
  21.          $sheet -> {MaxCol} ||= $sheet -> {MinCol};
  22.          foreach my $col ($sheet -> {MinCol} .. $sheet -> {MaxCol}) {
  23.             my $cell = $sheet -> {Cells} [$row] [$col];
  24.             if ($cell) {
  25.                printf("    (%s,%s) => %s\n", $row, $col, $cell -> {Val});
  26.                }
  27.             }
  28.          }
  29.       print "  End of sheet\n";
  30.       }
  31.    print "End of workbook '$Path'\n";
  32.    }
  33.  
  34.  
  35. my @PathList;
  36. # Use names on command line, or built-in test cases
  37. if ($#ARGV != -1) {
  38.    @PathList = @ARGV;
  39.    }
  40. else {
  41.    @PathList = (
  42.       "test.xlsx",
  43.       "Settlement_20120531.xlsx",
  44.       "207Settlement-2012-06-12.xlsx",
  45.       );
  46.    }
  47. foreach my $Path (@PathList) {
  48.    dump_sheet($Path);
  49.    }
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4

Lo llamas así: dumpxlsx archivo.xlsx

Si no te funciona, al final de la página donde encontré este programa hay una versión parcheada del módulo XLSX.pm de hace un mes.

Re: Problemas al leer un archivo xlsx

NotaPublicado: 2012-07-18 11:56 @539
por MARKO
Saludos, hugo11ab.

Quiero hacerte una pregunta: ¿estás trabajando en Windows? Si es así te recomiendo echarle un vistazo a Win32::OLE.

Para el caso que presentas sería algo así para jalar las fórmulas de la celdas.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Win32::OLE;
  2. use Win32::OLE qw(in with);
  3. use Win32::OLE::Const 'Microsoft Excel';
  4.  
  5. my $excel = Win32::OLE->new('Excel.Application');
  6. $excel -> {Visible} = 1;
  7. $excel    -> {DisplayAlerts} = 1;
  8. my $libro = $excel->Workbooks->Open($archivo); # abrir fichero Excel
  9. my $hoja = $libro->Worksheets("Hoja1");
  10. $hoja->Activate;
  11. my $formula = $hoja->Range("AA8")->{Formula};   #ya tienes la formula que estaba en la celda AA8
  12.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


aquí publiqué instrucciones relevantes para Win32::OLE con Excel.

Saludos

Re: Problemas al leer un archivo xlsx

NotaPublicado: 2012-07-18 12:16 @553
por hugo11ab
Gracias, explorer, gracias a la observación que me hiciste:

"Entonces... si tu eres el que genera la hoja inicial, no necesitas de ningún módulo para sacar las fórmulas. Ya tienes la información original, así que puedes grabarla en texto directamente."

Lo que hice fue que como yo genero el archivo xlsx, entonces abro otra hoja en el mismo archivo y desde ahí voy formando los registros para conformar el archivo plano. Una vez que ya tengo toda la información requerida, copio la columna del archivo de Excel y la pego en un archivo txt y de esta manera obtengo mi archivo plano.

Creo que no es la manera correcta de hacerlo, pero al final he obtenido el resultado deseado.

De todas formas le echaré un vistazo al programa que me recomendaste. Agradezco mucho tu ayuda.

Re: Problemas al leer un archivo xlsx

NotaPublicado: 2012-07-18 12:18 @554
por hugo11ab
Gracias, Marko; estoy trabajando en Linux.