Я новичок в 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" );
использовать строгий; использовать ДБИ; используйте Excel::Writer::XLSX; # подключиться к БД my $dbh = DBI->connect('dbi:ODBC:dbname', 'dblogin', 'dbpassword'); мой $sth1 = $dbh->selectall_arrayref("выберите col1, col2 из таблицы"); foreach my $ln (@$sth1) { my($col1, $col2) = @$ln; print "$col1 $col2\n";} my $workbook = Excel::Writer::XLSX->new('col1col2test.xlsx'); мой $worksheet = $workbook->add_worksheet(); $worksheet->write("A1", "$col1"); $worksheet->write("A2", "$col2");
@BalaRanga: Пожалуйста, не сбрасывайте код в такой комментарий. Как видите, это нечитабельно. Куда лучше добавить код в отредактируйте свой вопрос.

Если это ваш код, то он будет выдавать ошибки, жалуясь на то, что $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";
}
Для справки в будущем, когда вы обращаетесь за помощью к такому сайту, будет действительно полезно, если вы предоставите нам всю полезную информацию, особенно любые сообщения об ошибках, которые вы видите.
Покажите нам, что вы сделали до сих пор