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.

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top