如何动态更改 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);