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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top