Как изменить существующую книгу 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.
недавно я обновил документацию, на что я надеюсь, - это яркий пример того, как это сделать.