使用ParseExcel时是否可以更改工作表名称?

时间:2012-09-19 17:30:16

标签: perl perl-module

使用Spreadsheet::ParseExcel(作为模板)编写Perl脚本来解析现有的Excel工作簿,并在从数据库添加更新数据时创建新文件。

有没有办法在运行SaveAs函数之前更新各个工作表的名称?我想将它们重命名为客户编号,而不是默认的Sheet1,Sheet2等。我确实阅读了PerlDoc并确实看到有get_name()选项,但没有任何更改和重新保存。

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

如果您使用的是SpreadSheet::WriteExcel,则可以指定工作表的名称作为方法add_worksheet的第一个参数。这就是doc所说的:

$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,这是另一个想法。这个名称没有setter方法,所以让我们深入了解一下解决方法。

code of Spreadsheet::ParseExcel::Worksheet向我们展示了如何存储工作簿对象的名称:

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

    my $self = shift;

    return $self->{Name};
}

您只需通过工作表对象直接访问密钥名称

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

免责声明:您永远不应干涉对象的内部值,尤其是如果您无法控制其来源。内部结构可能会在将来的版本中发生变化,从而破坏您的代码!