使用perl中的Excel :: Writer :: XLSX构建正确的电子表格

时间:2013-12-01 02:21:47

标签: excel perl

作为一个新的perl用户,很难理解一切没有太多经验。

Bellow是perl脚本的一部分,它应该通过解析自定义软件生成的文本文件来构建电子表格。执行后,xlsx由perl构建,产品组填充在指定列的每一行中,产品将插入下一列。当我有太多的产品时,它们最终被插入到下一列,以及给定组的下一列,以及其他列。 理想情况下,我希望在同一产品列的下一行中插入多个产品。

目前:

==========================

组| Product_1 | Prodcut_2 |

===========================

理想情况下:

==================

组|产品1 |

==================

(空白)|产品2 |

==================

(空白)|产品3 |

==================

如何实现这一目标?

以下是当前代码的片段:

    my $product_regex ='^Newly listed product: (.*)$';
    if ($line =~ /$product_regex/) {
            $change = $1;

            if ($some_flag == 1) {
                    $some_flag = 0;
                    push(@{ $product_changes{$group}  } , $change);
            }
    }


my $format = $workbook->add_format();
$format->set_text_wrap();
my $worksheet = $workbook->add_worksheet( 'Sheet1' );
# Writing 2 column headers
$worksheet->write( 0, 0, 'Group' );
$worksheet->write( 0, 1, 'Product' );
my $row;
$row = 1;
for my $key (sort keys %product_changes) {
    # To avoid evaluation from Excel, $key must be placed in quotes
    $worksheet->write($row, 0, $key, $format );
    $worksheet->write($row, 1, $product_changes{"$key"},$format );
    $row++;

1 个答案:

答案 0 :(得分:3)

不确定您是在寻求解析或编写输出的帮助。

这是一种编写输出的方法,假设你已将其解析为arrayrefs的散列,group => [ product_change, product_change, ...]

my $row = 1;
for my $key (sort keys %product_changes) {
    $worksheet->write($row, 0, $key, $format);
    for my $pc (@{$product_changes{"$key"}}) {
        $worksheet->write($row++, 1, $pc, $format);
    }
}