¿Cómo puedo modificar un libro de Excel existente con Perl?
-
21-09-2019 - |
Pregunta
Spreadsheet::WriteExcel
, puedo crear un nuevo libro, pero lo que si quiero abrir un libro existente y modificar ciertas columnas? ¿Cómo iba a lograr eso?
Podría analizar todos los datos de la hoja usando Spreadsheet::ParseExcel
luego escribir de nuevo con nuevos valores en ciertas filas / columnas utilizando Spreadsheet::WriteExcel
, sin embargo. ¿Hay un módulo que ya combina los dos?
Principalmente sólo quiero abrir una .xls
, sobrescribir ciertas filas / columnas, y guardarlo.
Solución
Hoja de cálculo :: ParseExcel leerá en archivos de Excel existente:
my $parser = Spreadsheet::ParseExcel->new();
# $workbook is a Spreadsheet::ParseExcel::Workbook object
my $workbook = $parser->Parse('Book1.xls');
Pero lo que realmente :: ParseExcel :: SaveParser, que es una combinación de hoja de cálculo :: ParseExcel y Hoja de cálculo :: WriteExcel . Hay una ejemplo cerca de la parte inferior de la documentación.
Otros consejos
Si ha instalado Excel, entonces es casi trivial de hacer esto con Win32::OLE
. Aquí está el ejemplo de la propia documentación de 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;
Básicamente, Win32::OLE
le da todo lo que está disponible a un VBA o aplicación de Visual Basic, que incluye una gran variedad de cosas - todo, desde Excel y Word automatización para enumerar y montaje de unidades de red a través de Windows Script Host. Ha vienen de serie con las últimas ediciones de ActivePerl.
Hay una sección de la hoja de cálculo :: docs WriteExcel que cubre Modificación de hojas de cálculo y volver a escribir .
Un archivo de Excel es un archivo binario en un archivo binario. Contiene varias sumas de comprobación interrelacionadas y cambiantes, incluso un byte puede causar que se dañe.
Como tal no se puede simplemente añadir o actualizar un archivo de Excel. La única manera de lograr esto es leer el archivo en la memoria, realice los cambios o adiciones necesarias y luego escribir el archivo de nuevo.
Puede leer y escribir un archivo de Excel usando la hoja de cálculo :: :: ParseExcel módulo SaveParser que es una envoltura alrededor de la hoja de cálculo :: ParseExcel y hoja de cálculo :: WriteExcel. Es parte de la Hoja de cálculo :: paquete ParseExcel .
Hay un ejemplo también.
Los href="http://metacpan.org/pod/Spreadsheet::ParseExcel::SaveParser" :: :: módulo ParseExcel SaveParser es una envoltura alrededor Hoja de cálculo :: ParseExcel y hoja de cálculo :: WriteExcel.
He actualizado recientemente con la documentación, lo que espero, es un ejemplo más claro de cómo hacer esto .