どのように私はPerlで、既存のExcelブックを変更することができますか?
-
21-09-2019 - |
質問
Spreadsheet::WriteExcel
ので、私は新しいブックを作成しますが、どのような場合は、私がしたいことができます既存のブックを開いて、特定の列を変更するには?私はそれを達成する方法を?
私は Spreadsheet::ParseExcel
に、書き込みを使用したシートのうち、すべてのデータを解析することができそれはしかし、 Spreadsheet::WriteExcel
を使用して特定の行/列の新しい値でバックします。モジュールはすでに
主に、私はちょうど、.xls
を開き、上書き特定の行/列、およびそれを保存したい。
解決
スプレッドシート:: ParseExcel の既存のExcelファイルを読み込みます。
my $parser = Spreadsheet::ParseExcel->new();
# $workbook is a Spreadsheet::ParseExcel::Workbook object
my $workbook = $parser->Parse('Book1.xls');
しかし、あなたの本当にの希望するスプレッドシートです:: ParseExcel :: SaveParser に、スプレッドシートの組み合わせである:: ParseExcelするそして、スプレッドシート:: WriteExcel に。ドキュメントの下部近く例ではあります。
他のヒント
は、Excelがインストールされている場合は、それは Win32::OLE
するでこれを行うことはほとんど自明です。ここで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;
列挙し、Windows Script Hostを介して、ネットワークドライブをマウントするExcelとWordの自動化に至るまで - 基本的には、Win32::OLE
はあなたのものの巨大な様々なを含んでVBAまたはVisual Basicアプリケーションに利用できるすべてを提供します。これは、ActivePerlの最後の数のエディションに標準で付属しています。
スプレッドシートのセクション::カバー変更と書き換えスプレッドシートそのWriteExcelのドキュメントがありますのます。
アンExcelファイルは、バイナリファイル内のバイナリファイルです。これは、いくつかの相互リンクチェックサムが含まれ、さらには1つのバイトを変更すると、それが破損する可能性があります。
そのように、あなたは単純にExcelファイルを追加または更新することはできません。これを達成する唯一の方法は、ファイル全体をメモリに読み込む必要な変更や追加を行い、その後、再度ファイルを書き出すことです。
あなたが読んで、Excelのスプレッドシートのラッパーであるスプレッドシートを使用してファイル:: ParseExcel :: SaveParserモジュール:: ParseExcelおよびスプレッドシート:: WriteExcelを書き換えることができます。それはスプレッドシート:: ParseExcel のパッケージの一部です。
は、同様の例があります。
スプレッドシート:: ParseExcel :: SaveParser のモジュールラッパーの周りにありますスプレッドシート:: ParseExcelおよびスプレッドシート:: WriteExcelます。
私は最近、が明確例であり、私が望んでいる、とのドキュメントを更新しますこのに行う方法のます。