如何动态更改XLSX写入格式?

时间:2016-02-03 16:21:56

标签: perl xlsx writer

我正在使用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中设置一次,并且不会更改。

1 个答案:

答案 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);