Используйте Perl, чтобы выбрать несколько выходных данных запроса из базы данных SQL и поместить в один лист Excel - PullRequest
0 голосов
/ 27 мая 2019

Я новичок в 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" );

1 Ответ

0 голосов
/ 28 мая 2019

Если это ваш код, то он будет выдавать ошибки с жалобами на $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";
}

Для справки в будущем, когда вы обращаетесь за помощью к сайту, подобному этому, очень полезно, если вы дадите нам всю полезную информацию - особенно сообщения об ошибках, которые вы видите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...