どのように私はPerlで、既存のExcelブックを変更することができますか?

StackOverflow https://stackoverflow.com/questions/1368960

  •  21-09-2019
  •  | 
  •  

質問

Spreadsheet::WriteExcel ので、私は新しいブックを作成しますが、どのような場合は、私がしたいことができます既存のブックを開いて、特定の列を変更するには?私はそれを達成する方法を?

私は Spreadsheet::ParseExcel に、書き込みを使用したシートのうち、すべてのデータを解析することができそれはしかし、 Spreadsheet::WriteExcel を使用して特定の行/列の新しい値でバックします。モジュールはすでに

?2を兼ね備えていることがあります

主に、私はちょうど、.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ます。

私は最近、が明確例であり、私が望んでいる、とのドキュメントを更新しますこのに行う方法のます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top