8

ではSpreadsheet::WriteExcel、新しいワークブックを作成できますが、既存のブックを開いて特定の列を変更したい場合はどうすればよいでしょうか? どうすればそれを達成できますか?

ただし、を使用してシートからすべてのデータを解析しSpreadsheet::ParseExcel、特定の行/列に新しい値を書き戻すことができますSpreadsheet::WriteExcel。すでに 2 つを組み合わせたモジュールはありますか?

.xls主に、 を開き、特定の行/列を上書きして保存したいだけです。

4

4 に答える 4

14

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::ParseExcelSpreadsheet::WriteExcelの組み合わせです。ドキュメントの下部にがあります。

于 2009-09-02T17:09:53.153 に答える
9

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;

基本的にWin32::OLE、VBA または Visual Basic アプリケーションで使用できるすべてのものを提供します。これには、Excel および Word の自動化から、Windows スクリプト ホストを介したネットワーク ドライブの列挙およびマウントまで、さまざまなものが含まれます。これは、ActivePerl の最近のいくつかのエディションに標準装備されています。

于 2009-09-03T09:50:02.613 に答える
3

Spreadsheet::WriteExcel ドキュメントには、Modifying and Rewriting Spreadsheets をカバーするセクションがあります。

Excel ファイルは、バイナリ ファイル内のバイナリ ファイルです。相互にリンクされた複数のチェックサムが含まれており、1 バイトでも変更すると破損する可能性があります。

そのため、Excel ファイルを単純に追加または更新することはできません。これを実現する唯一の方法は、ファイル全体をメモリに読み込み、必要な変更または追加を行ってから、ファイルを再度書き出すことです。

Spreadsheet::ParseExcel::SaveParser モジュールを使用して、Excel ファイルを読み書きできます。これは、Spreadsheet::ParseExcel および Spreadsheet::WriteExcel のラッパーです。Spreadsheet::ParseExcelパッケージの一部です。

例もあります。

于 2009-09-02T17:12:50.510 に答える
1

Spreadsheet::ParseExcel::SaveParserモジュールは、Spreadsheet::ParseExcel および Spreadsheet::WriteExcel のラッパーです。

私は最近ドキュメントを更新しました.これを行う方法のより明確な例です.

于 2009-09-02T19:23:56.347 に答える