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.

¿Fue útil?

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 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top