我正在使用Excel::Writer::XLSX
模块,并希望根据列号在Excel电子表格中更改左右对齐:
while( my $row = $csv->getline($fh) ) {
my $col_num = 0;
my $format = $std_format;
foreach ( @$row ) {
if ( $col_num < 2 ) {
print "col num $col_num, left\n";
$format->set_align('left');
}
else {
print "col num $col_num, right\n";
$format->set_align('right');
}
$worksheet->write($row_num, $col_num, $_, $format);
$col_num++;
}
$row_num++;
}
这在我的输出电子表格中不起作用。对齐只能在$std_format
中设置一次,并且不会更改。
答案 0 :(得分:1)
您不能只指定一个新变量来包含所需的格式。必须使用add_format
您没有显示足够的代码让我能够看到$std_format
是什么,但如果您已正确创建它,那么您可以使用copy
克隆可用的新嵌入格式修改
我建议您写一下这样的内容,它会添加$std_format
的两种变体,并选择在编写单元格时使用哪一种
my $std_left = $std_format->copy;
$std_left->set_align('left');
my $std_right = $std_format->copy;
$std_right->set_align('right');
my $row_num = 0;
while ( my $row = $csv->getline($fh) ) {
my $col_num = 0;
for my $cell ( @$row ) {
my $format = $col_num < 2 ? $std_left : $std_right;
$worksheet->write($row_num, $col_num, $cell, $format);
$col_num++;
}
$row_num++;
}
当然,如果这是你喜欢的风格,你可以将整个事情放在一个单一的陈述中
$worksheet->write($row_num, $col_num, $cell, $col_num < 2 ? $std_left : $std_right);