我是Perl的新手,所以希望有人可以帮助我,
我正在一个特殊的验证项目中,我们从数据库中提取数据并在excel中显示为报告。我有一个Perl脚本,可以从数据库中提取数据并将其放入excel。但是我试图从多个查询中提取数据,并在单个Excel工作表中显示多个输出。
如何在单个Excel工作表中返回多个查询输出?
use strict;
use DBI;
use Excel::Writer::XLSX;
# connect to the db
my $dbh = DBI->connect('dbi:ODBC:dbname', 'dblogin', 'dbpassword');
my $sth1 = $dbh->selectall_arrayref(" select col1, col2 from table");
foreach my $ln (@$sth1) {
my($col1, $col2) = @$ln;
print "$col1 $col2\n";
}
my $workbook = Excel::Writer::XLSX->new( 'col1col2test.xlsx' );
my $worksheet = $workbook->add_worksheet();
$worksheet->write( "A1", "$col1" );
$worksheet->write( "A2", "$col2" );
答案 0 :(得分:0)
如果这是您的代码,那么它将抱怨$col1
和$col2
需要“显式包名称”。
这意味着您没有正确声明变量。您可以使用关键字my
声明变量。但是my
在代码块中声明变量。因此,当您编写此代码时:
foreach my $ln (@$sth1) {
my($col1, $col2) = @$ln;
print "$col1 $col2\n";
}
仅在该块的内部中声明变量。当您尝试在块外使用它们时:
$worksheet->write( "A1", "$col1" );
$worksheet->write( "A2", "$col2" );
您会收到我上面提到的错误。
此问题的解决方法是在正确的级别(即循环的外部)声明变量。
my ($col1, $col2);
foreach my $ln (@$sth1) {
($col1, $col2) = @$ln;
print "$col1 $col2\n";
}
供以后参考,当在这样的站点上寻求帮助时,如果您向我们提供所有有用的信息(尤其是看到的任何错误消息),将非常有用。