Perl循环输出到Excel电子表格

时间:2011-08-01 15:50:12

标签: perl excel loops foreach

我有一个Perl脚本,其相关位在下面发布。

# Pull values from cells
        ROW:
        for my $row ( $row_min + 1 .. $row_max ) {
            my $target_cell   = $worksheet->get_cell( $row, $target_col);
            my $response_cell = $worksheet->get_cell( $row, $response_col);

            if ( defined $target_cell && defined $response_cell ) {
                my $target   = $target_cell->value();
                my $response = $response_cell->value();

# Determine relatedness
                my $value      = $lesk->getRelatedness($target, $response);

# Copy output to new Excel spreadhseet, 'data.xls'
                my $workbook1  = Spreadsheet::WriteExcel->new('data.xls'); 
                my $worksheet1 = $workbook1->add_worksheet();
                $worksheet1->set_column(0, 3, 18);
                my $row = 0;

                foreach ($target) {
                $row++;
                $worksheet1->write( $row, 0, "Target      = $target\n");
                $worksheet1->write( $row, 1, "Response    = $response\n");
                $worksheet1->write( $row, 2, "Relatedness = $value\n");
                }
            }
        }

此脚本使用Perl模块ParseExcel和WriteExcel。输入数据电子表格是两列下的单词列表,一列标记为“目标”,另一列标记为“响应”。该脚本获取每个目标词和每个响应词,并计算它们之间的相关性值(这就是

$lesk->getRelatedness

部分代码正在进行中。它调用一个名为WordNet :: Similarity的perl模块来计算单词之间相关性的度量。)

所有这一切都很好。问题是我试图将输出(相似度量或此脚本中的$值)写入新的Excel文件。无论我对代码做什么,它给我的唯一输出是LAST目标和响应字之间的相关性。它忽略了所有其余的。

但是,这只发生在我尝试写入Excel文件时。如果我使用'print'函数,我可以在命令窗口中看到所有输出。我总是可以将它复制并粘贴到Excel中,但如果我能自动化它会更容易。知道问题是什么吗?

2 个答案:

答案 0 :(得分:2)

您每次都将$ row的值重置为0.

答案 1 :(得分:2)

问题解决了。我只需要移动

my $workbook1 = Spreadsheet::WriteExcel->new('data.xls'); 
my $worksheet1 = $workbook1->add_worksheet();

指向脚本的另一部分。由于它们处于'for'语句中,因此程序在每次循环时都会覆盖'data.xls'文件。