Newsgroup: it.comp.lang.perl
Titolo: Leggere file EXCEL .

Ciao,
ho fatto un semplice script che a fronte di numeri di agenzie cerca in una
cartella windows i file che hanno nel nome quel numero e li aggreggo e li
scrivo in una altra cartella di output.
Il problema è che devo digitare  piu o meno  2000 numeri......
ora ho scoperto che i numeri che devo inserire sono riportati su un foglio
excel con questa logica:
             col1        col2    col3    col4    col5      col6      col7
col8          etc etc
riga1     1001     0768    0987    2389    0074    0989
riga2     1004     0765    5546    2314    8769    8765    3675     4589
riga3
dove nella col1 sono indicati i numeri delle agenzie madri  , nelle restanti
colonne sono riportati i numeri delle agenzie figlie.
Ad oggi devo digitare   (durante il run dello script perl) il numero  1001,
lo script mi crea nella cartella output un file  1001.txt ,
poi digitare  0768 , 0987 , 2389 ,0074 0989  cioè tutte i numeri di agenzie
(figlie) che compongono l'agenzia madre (1001) , lo script trova nella
cartella di input  le agenzie figlie (se ci sono) e le aggregga tutte nella
cartella di output  nel file avente nome ==> 1001.txt.
Capite che devo digitare questi numeri almeno  2000 volte il rischio di
errore è notevole.
come posso fare per automatizzare con perl questa fase di inserimento dati,
visto che mi viene fornito un foglio excel dove ci sono le aggregazioni.
Il numero di celle per le agenzie figlie è variabile.
Io vorrei  digitare  solo il numero della agenzia madre e poi il pgm
dovrebbe cercare nel foglio xls le corrispondenti agenzie figlie e creare
così il file aggregato nella cartella di output.
Devo per forza fare così perchè l'elenco delle agenzie da estrarre cambia di
volta in volta.
Grazie per l'aiuto
Carlo

 dovrebbe cercare nel foglio xls le corrispondenti agenzie figlie e creare
Con il seguente script, ottenuto modificando l'esempio che trovi dando
 >perldoc Spreadsheet::ParseExcel
richiamandolo come
 >
script.pl
 1001
ottengo:
768
987
2389
74
989
use strict;
use Spreadsheet::ParseExcel;
my $oBook = Spreadsheet::ParseExcel::Workbook->Parse('prova.xls') or die 
"$!\n";
my($iR, $iC, $oWkS, $oWkC);
foreach my $oWkS (@{$oBook->{Worksheet}}) {
         for(my $iR = $oWkS->{MinRow} ; defined $oWkS->{MaxRow} && $iR 
<= $oWkS->{MaxRow} ; $iR++) {
		if ($oWkS->{Cells}[$iR][0]->Value == $ARGV[0]) {
	                for(my $iC = $oWkS->{MinCol}+1 ; defined 
$oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
                 	    $oWkC = $oWkS->{Cells}[$iR][$iC];
         	            print $oWkC->Value, "\n" if($oWkC);
			}
                 }
	}
}

così il file aggregato nella cartella di output.
A parte Spreadsheet::ParseExcel, come dall'esempio di Andrea Maestrutti,
con Win32::OLE puoi usare i metodi di ricerca di Excel. Utilizzando la
proprietà Range dell'oggetto Worksheet, dovresti farti restituire la
colonna in cui sono contenuti i numeri delle agenzie madri; quindi con il
metodo Find di questo oggetto Range trovi il numero ricercato e prosegui a
leggere sulla stessa riga finché c'è qualcosa o in un certo intervallo di
colonne.
Non ho fatto prove dirette, ma ad occhio direi che dovrebbe metterci un po'
di più a caricare il modulo e un un po' di meno nella ricerca.
Va da sé poi che trovo la decisione di registrare quei dati in quel modo su
un foglio Excel abbastanza discutibile, ma del resto ognuno ha i suoi
problemi.
Ciao.