Muchas gracias, explorer, por tu aportación. He reescrito el
script a ver si consigo aprender y que sea más instructivo para alguien más...
Using perl Syntax Highlighting
#!/usr/bin/perl
# use strict;
use Win32::OLE;
use Win32::OLE qw(in with);
use Win32::OLE::Const "Microsoft Office .* Object Library";
$Win32::OLE::Warn = 3;
system ("cls");
my $excel;
my $libro;
my @hojas;
my @nombre_hojas;
# Open Excel application
$excel = Win32::OLE -> GetActiveObject('Excel.Application') || Win32::OLE -> new('Excel.Application', 'Quit');
# Open Excel File
$libro = $excel -> Workbooks -> Open ('C:\Perl\win32OLE\Prov.xlsx');
#Metemos las hojas en un Array. En $hojas[0] creo que guarda propiedades, no las hojas.
@hojas = $libro -> {Worksheets};
print "jaja $hojas[1].\n";
#Metemos los nombres de las hojas en un Array
@nombre_hojas = map { $_->{'Name'} } (in $libro->{Worksheets});
print $nombre_hojas[0]."\n";
print $nombre_hojas[1]."\n";
# Get the last row
my $maxfila = $hojas[1] -> UsedRange -> Find({What => "*", SearchDirection => xlPrevious, SearchOrder => xlByRows}) -> {Row};
print "jeje $maxfila.\n";
# Salvamos y cerramos el libro
$libro -> Save;
$libro -> Close;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Efectivamente, el tema del segundo error lo he resuelto como comentabas tú, cambiando la línea 5 por la actual.
He puesto también la ruta absoluta en la línea 18 para evitar el primer problema, pero ahora me encuentro con la siguiente salida:
jaja .
Prova_1
Prova_2
Can't call method "UsedRange" on an undefined value at C:\Perl\win32OLE\pru.pl line 30.que me dice que no puedo llamar a "UsedRange" en un valor no definido. Y me da que es porque la línea 21 no está metiendo nada en $hojas[1], ya que como vemos en la salida, sólo me imprime el texto "jaja".
Creo que no estoy entendiendo bien qué es exactamente lo que metemos en @hojas con el "WoorkSheets". ¿Alguna sugerencia?
Gracias de antemano.