使用Spreadsheet::ParseExcel(作为模板)编写Perl脚本来解析现有的Excel工作簿,并在从数据库添加更新数据时创建新文件。
有没有办法在运行SaveAs函数之前更新各个工作表的名称?我想将它们重命名为客户编号,而不是默认的Sheet1,Sheet2等。我确实阅读了PerlDoc并确实看到有get_name()
选项,但没有任何更改和重新保存。
任何帮助都会很棒。
答案 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'};
免责声明:您永远不应干涉对象的内部值,尤其是如果您无法控制其来源。内部结构可能会在将来的版本中发生变化,从而破坏您的代码!