Метод write () в Spreadsheet :: WriteExcel является синтаксической оболочкой для ряда других методов.
В общем случае, если он не выполняет то, что вам нужно, есть два способа: использовать явно упакованный метод, который вам нужен, или измените поведение метода write () в соответствии с вашими потребностями.
Если в первом случае вам просто нужно развернуть неявный цикл, который write () дает вам для вложенных данных. Примерно так:
#!/usr/bin/perl
use strict;
use warnings;
use Spreadsheet::WriteExcel;
my $workbook = Spreadsheet::WriteExcel->new( 'example.xls' );
my $worksheet = $workbook->add_worksheet();
my @eec = (
[ 'maggie', 'milly', 'molly', 'may' ],
[ 13, 14, 15, 16 ],
[ 'shell', 'star', 'crab', 'stone' ]
);
my $row = 0;
for my $aref ( @eec ) {
my $col = 0;
for my $token ( @$aref ) {
if ( $token eq 'may' ) {
$worksheet->write_url( $row, $col, 'http://foo.com', $token );
}
else {
$worksheet->write( $row, $col, $token );
}
$col++;
}
$row++;
}
__END__
Во втором случае вы можете изменить write () с помощью метода add_write_handler (). Посмотрите документацию и примеры . Это немного продвинутая категория, поэтому, если вы новичок в Spreadsheet :: WriteExcel, просто используйте более простой метод выше.