Come posso modificare una cartella di lavoro di Excel esistente con il Perl?
-
21-09-2019 - |
Domanda
Spreadsheet::WriteExcel
, posso creare una nuova cartella di lavoro, ma cosa succede se voglio per aprire un libro esistente e modificare alcuni colonne? Come faccio a realizzare questo?
ho potuto analizzare tutti i dati fuori del foglio utilizzando Spreadsheet::ParseExcel
quindi scrivere indietro con i nuovi valori in determinate righe / colonne utilizzando Spreadsheet::WriteExcel
, tuttavia. C'è un modulo che combina già i due?
Principalmente voglio solo aprire una .xls
, sovrascrivere alcune righe / colonne, e salvarla.
Soluzione
Spreadsheet :: ParseExcel leggerà nei file di Excel esistente:
my $parser = Spreadsheet::ParseExcel->new();
# $workbook is a Spreadsheet::ParseExcel::Workbook object
my $workbook = $parser->Parse('Book1.xls');
Ma che cosa si davvero Spreadsheet :: ParseExcel :: SaveParser , che è una combinazione di Spreadsheet :: ParseExcel e Spreadsheet :: WriteExcel . C'è un esempio vicino al fondo della documentazione.
Altri suggerimenti
Se avete installato Excel, quindi è quasi banale per fare questo con Win32::OLE
. Ecco l'esempio dalla propria documentazione di Win32::OLE
:
use Win32::OLE;
# use existing instance if Excel is already running
eval {$ex = Win32::OLE->GetActiveObject('Excel.Application')};
die "Excel not installed" if $@;
unless (defined $ex) {
$ex = Win32::OLE->new('Excel.Application', sub {$_[0]->Quit;})
or die "Oops, cannot start Excel";
}
# get a new workbook
$book = $ex->Workbooks->Add;
# write to a particular cell
$sheet = $book->Worksheets(1);
$sheet->Cells(1,1)->{Value} = "foo";
# write a 2 rows by 3 columns range
$sheet->Range("A8:C9")->{Value} = [[ undef, 'Xyzzy', 'Plugh' ],
[ 42, 'Perl', 3.1415 ]];
# print "XyzzyPerl"
$array = $sheet->Range("A8:C9")->{Value};
for (@$array) {
for (@$_) {
print defined($_) ? "$_|" : "<undef>|";
}
print "\n";
}
# save and exit
$book->SaveAs( 'test.xls' );
undef $book;
undef $ex;
In sostanza, Win32::OLE
ti dà tutto ciò che è a disposizione di un VBA o Visual Basic, che comprende una grande varietà di cose - tutto da Excel e Word automazione per l'enumerazione e il montaggio delle unità di rete attraverso Windows Script Host. Si è venuto di serie con le ultime edizioni di ActivePerl.
C'è una sezione del foglio di calcolo :: docs WriteExcel che copre Modifica e riscrittura fogli di calcolo .
Un file di Excel è un file binario all'interno di un file binario. Esso contiene diversi checksum e interconnesse che cambiano anche un byte può causare a diventare danneggiato.
In quanto tale non si può semplicemente aggiungere o aggiornare un file di Excel. L'unico modo per raggiungere questo obiettivo è quello di leggere l'intero file in memoria, apportare le modifiche o integrazioni richieste e poi scrivere il file di nuovo.
È possibile leggere e riscrivere un file Excel utilizzando il foglio di calcolo :: :: ParseExcel modulo SaveParser che è un wrapper foglio di calcolo :: ParseExcel e foglio di calcolo :: WriteExcel. E 'parte del Spreadsheet :: ParseExcel pacchetto.
C'è un esempio pure.
I href="http://metacpan.org/pod/Spreadsheet::ParseExcel::SaveParser" :: modulo ParseExcel :: SaveParser è un wrapper Foglio di calcolo :: ParseExcel e foglio di calcolo :: WriteExcel.
Recentemente ho aggiornato la documentazione con, quello che spero, è un esempio più chiaro di come fare questo .