Comment puis-je modifier un classeur Excel existant avec Perl?
-
21-09-2019 - |
Question
Spreadsheet::WriteExcel
, je peux créer un nouveau classeur, mais si je veux d'ouvrir un livre existant et modifier certaines colonnes? Comment pourrais-je accomplir cela?
Je pourrais analyser toutes les données de la feuille en utilisant Spreadsheet::ParseExcel
puis écrire il revient avec de nouvelles valeurs dans certaines lignes / colonnes à l'aide Spreadsheet::WriteExcel
, cependant. Y at-il un module qui combine déjà les deux?
Principalement, je veux juste ouvrir un .xls
, remplacer certaines lignes / colonnes, et enregistrez-le.
La solution
Spreadsheet :: ParseExcel va lire dans les fichiers Excel existants:
my $parser = Spreadsheet::ParseExcel->new();
# $workbook is a Spreadsheet::ParseExcel::Workbook object
my $workbook = $parser->Parse('Book1.xls');
Mais ce que vous vraiment est Spreadsheet :: ParseExcel :: SaveParser , qui est une combinaison de feuille de calcul et . Il y a un près du bas de la documentation.
Autres conseils
Si vous avez installé Excel, il est presque trivial de le faire avec Win32::OLE
. Voici l'exemple de la propre documentation 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;
En gros, Win32::OLE
vous donne tout ce qui est disponible à un VBA ou de l'application Visual Basic, qui comprend une grande variété de choses - tout d'automatisation Excel et Word pour le montage et les lecteurs l'énumération de réseau via Windows Script Host. Il est venu en standard avec les dernières éditions de ActiveState.
Il y a une partie de la feuille de calcul :: writeexcel docs qui couvre Spreadsheets Modification et Réécriture .
Un fichier Excel est un fichier binaire dans un fichier binaire. Il contient plusieurs checksums reliés entre eux et même en changeant un octet peut l'amener à devenir corrompu.
En tant que tel vous ne pouvez pas simplement ajouter ou mettre à jour un fichier Excel. La seule façon d'y parvenir est de lire le fichier en mémoire, apportez les modifications nécessaires ou ajouts puis écrire le fichier à nouveau.
Vous pouvez lire et réécrire un fichier Excel à l'aide de la feuille de calcul :: :: ParseExcel Module SaveParser qui est un wrapper autour de la feuille de calcul :: ParseExcel et Spreadsheet :: WriteExcel. Il fait partie du Spreadsheet :: package ParseExcel.
Il y a un exemple aussi bien.
Je récemment mis à jour la documentation avec, je l'espère, est un exemple plus clair de la façon de le faire .