Из того, что я вижу в примере документации Spreadsheet::WriteExcel
, диапазоны ячеек должны передаваться как один строковый аргумент, хотя, как указывает Джон, допустимы и отдельные аргументы:
Для формы с одним аргументом это будет выглядеть так:
$custom_ws->merge_range('A1:H1', $str, $merge_format);
Одной из идей может быть накатить пару вспомогательных подпрограмм, чтобы разрешить использование этой формы:
sub range {
my ( $from_row, $from_col ) = @{ $_[0] };
my ( $to_row, $to_col ) = @{ $_[1] };
die "Expecting to go from top-left to bottom-right"
if $from_row > $to_row || $from_col > $to_col;
return join '', alpha( $from_row ), $from_col, ':', alpha( $to_row ), $to_col;
}
sub alpha {
my $row = 'A';
$row++ for 1 .. +shift;
return $row;
}
А затем позвоните range
:
$custom_ws->merge_range( range( [ $row, $col ],
[ $row, $col + $length ] ),
$str,
$merge_format );