Как изменить существующую книгу Excel с помощью Perl?

С Spreadsheet::WriteExcel, Я могу создать новую книгу, но что, если я хочу открыть существующую книгу и изменить определенные столбцы? Как мне это сделать?

Я мог бы разобрать все данные из листа, используя Spreadsheet::ParseExcel затем запишите его обратно с новыми значениями в определенных строках / столбцах, используя Spreadsheet::WriteExcel однако. Есть ли модуль, который уже объединяет эти два?

в основном, я просто хочу открыть .xls, изменить некоторые строки / столбцы и сохраните их.

4 ответов


Как Spreadsheet::ParseExcel будет читать в существующих файлах excel:

my $parser   = Spreadsheet::ParseExcel->new();
# $workbook is a Spreadsheet::ParseExcel::Workbook object
my $workbook = $parser->Parse('Book1.xls');

но то, что вы действительно хочу Как Spreadsheet::ParseExcel::SaveParser, который представляет собой комбинацию Как Spreadsheet::ParseExcel и Как Spreadsheet::WriteExcel. Есть пример в нижней части документации.


если у Вас установлен Excel, то это почти тривиально сделать с Win32::OLE. Вот пример из Win32::OLE's собственное документации:

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;

по сути, Win32::OLE дает вам все, что доступно для приложения VBA или Visual Basic, которое включает в себя огромное разнообразие вещей-все от Excel и Word automation до перечисления и монтажа сетевых дисков через Windows Script Host. Он пришел стандарт с последними несколькими изданиями С использованием ActivePerl.


есть раздел электронной таблицы:: writeexcel docs, который охватывает изменение и переписывание электронных таблиц.

файл Excel-это двоичный файл в двоичном файле. Он содержит несколько взаимосвязанных контрольных сумм и изменение даже одного байта может привести к его повреждению.

таким образом, вы не можете просто добавить или обновить файл Excel. Единственный способ достичь этого-прочитать весь файл в память, внести необходимые изменения или дополнения, а затем снова запишите файл.

вы можете прочитать и переписать файл Excel с помощью модуля Spreadsheet::ParseExcel::SaveParser, который является оболочкой вокруг Spreadsheet::ParseExcel и Spreadsheet:: WriteExcel. Это часть Как Spreadsheet::ParseExcel пакета.

есть пример.


на Как Spreadsheet::ParseExcel::SaveParser модуль-это оболочка вокруг Spreadsheet:: ParseExcel и Spreadsheet:: WriteExcel.

недавно я обновил документацию, на что я надеюсь, - это яркий пример того, как это сделать.