如何动态更改 XLSX 写入格式?
How can I change XLSX write format dynamically?
我正在使用 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
中设置一次,并且不会更改。
您不能只分配一个新变量来包含所需的格式。必须使用 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);
我正在使用 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
中设置一次,并且不会更改。
您不能只分配一个新变量来包含所需的格式。必须使用 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);