1

Spreadsheet::ParseExcel (テンプレートとして)を使用して既存の Excel ワークブックを解析し、DB から更新されたデータを追加しながら新しいファイルを作成する Perl スクリプトを作成しました。

SaveAs 関数を実行する前に、個々のワークシートの名前を更新する方法はありますか? それらの名前を、デフォルトの Sheet1、Sheet2 などではなく、顧客番号に変更したいと思います。PerlDoc を読み、get_name()オプションがあることを確認しましたが、変更して再保存するものはありません。

どんな助けでも素晴らしいでしょう。

4

1 に答える 1

1

SpreadSheet::WriteExcelを使用している場合は、ワークシートの名前をメソッドadd_worksheetの最初のパラメーターとして指定できます。これは、ドキュメントが言うことです:

$worksheet1 = $workbook->add_worksheet();           # Sheet1
$worksheet2 = $workbook->add_worksheet('Foglio2');  # Foglio2
$worksheet3 = $workbook->add_worksheet('Data');     # Data
$worksheet4 = $workbook->add_worksheet();           # Sheet4

したがって、あなたがやりたいことはおそらく次のようなものです:

while (my $res = $dbh->fetchrow_hashref) {
  my $worksheet = $workbook->add_worksheet($res->{'customerName'});
  # do stuff with that sheet
}

更新: Spreadsheet::ParseExcel のみを使用しているため、ここに別のアイデアがあります。名前のセッター メソッドがないため、回避策を見つけるために詳しく調べてみましょう。

Spreadsheet::ParseExcel::Worksheetのコードは、ワークブック オブジェクトの名前がどのように格納されるかを示しています。

###############################################################################
#
# get_name()
#
# Returns the name of the worksheet.
#
sub get_name {

    my $self = shift;

    return $self->{Name};
}

ワークシートオブジェクトを介してキーNameに直接アクセスできます。

$worksheet->{'Name'} = $res->{'customerName'};

免責事項:特にオブジェクトのソースを制御できない場合は、オブジェクトの内部値に干渉しないでください。内部構造は将来のリリースで変更される可能性があり、コードが壊れる可能性があります!

于 2012-09-19T18:13:35.363 に答える