Spreadsheet :: WriteExcel не записывает строку в Excel с помощью merge_range - PullRequest
2 голосов
/ 25 ноября 2011

Я использую Spreadsheet::WriteExcel, чтобы создать Excel и записать в него некоторые данные.Я использую merge_range для объединения некоторых ячеек.Но проблема в том, что мой код ниже объединяет ячейки, но не показывает данные в нем ($str содержимое).Я не могу понять, почему ????.

Пожалуйста, помогите мне, где я ошибся?

Ниже приведена часть моего кода:

#!/usr/bin/perl

use Spreadsheet::WriteExcel;
use strict;

my $wb = Spreadsheet::WriteExcel->new('excel_test.xls');
my $custom_ws = $wb->add_worksheet('Custom Parameters');

my $wb_format_merge = $wb->add_format();
$wb_format_merge->set_bold();
$wb_format_merge->set_text_wrap();
$wb_format_merge->set_border(1);
$wb_format_merge->set_align('left');
$wb_format_merge->set_valign('vcenter');

my($row, $coll) = 0;
my $merge_coll_len = 8;

###### write data ###
my $str = "Please select the follwong metrics to generate custom report in Details sheet";
$custom_ws->merge_range($row, $coll, $row, $coll + $merge_coll_len, $str,$merge_format);

$row += 2;
$custom_ws->write($row, $coll, 'select the data type for the reference');

Ответы [ 2 ]

3 голосов
/ 25 ноября 2011
my($row, $coll) = 0;

$coll не определено

использовать

my($row, $coll)=(0,0);

Использование 4 row, coll, row, coll для merge_range вполне допустимо (при условии, что они имеют значения;))

2 голосов
/ 25 ноября 2011

Из того, что я вижу в примере документации 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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...