Spreadsheet :: WriteExcel不使用merge_range在Excel中编写字符串
问题描述:
我使用Spreadsheet::WriteExcel
创建excel并向其中写入一些数据。 我正在使用merge_range
合并某些单元格。 但问题是我下面的代码没有合并单元格,但不显示数据($str
内容)。 我无法弄清楚为什么????。Spreadsheet :: WriteExcel不使用merge_range在Excel中编写字符串
请帮我,我哪里错了?
下面是我的代码的一部分:
#!/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');
答
my($row, $coll) = 0;
$coll
是不确定的
使用
my($row, $coll)=(0,0);
使用4行,COLL,行,COLL为merge_range
是完全有效的(只要它们具有价值;))
答
从我可以在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);
+1:这回答了问题 – Zaid
++正确的答案。 @ kailash19将“使用警告”添加到程序中会引起这种情况。 – jmcnamara
非常感谢,现在正在工作。 – kailash19