我有一个使用Spreadsheet :: ParseExcel的Perl程序.但是,出现了两个困难,我无法弄清楚如何解决.该程序的脚本如下:
#!/usr/bin/perl use strict; use warnings; use Spreadsheet::ParseExcel; use WordNet::Similarity::lesk; use WordNet::QueryData; my $wn = WordNet::QueryData->new(); my $lesk = WordNet::Similarity::lesk->new($wn); my $parser = Spreadsheet::ParseExcel->new(); my $workbook = $parser->parse ( 'input.xls' ); if ( !defined $workbook ) { die $parser->error(),".\n"; } WORKSHEET: for my $worksheet ( $workbook->worksheets() ) { my $sheetname = $worksheet->get_name(); my ( $row_min,$row_max ) = $worksheet->row_range(); my ( $col_min,$col_max ) = $worksheet->col_range(); my $target_col; my $response_col; # Skip worksheet if it doesn't contain data if ( $row_min > $row_max ) { warn "\tWorksheet $sheetname doesn't contain data. \n"; next WORKSHEET; } # Check for column headers COLUMN: for my $col ( $col_min .. $col_max ) { my $cell = $worksheet->get_cell( $row_min,$col ); next COLUMN unless $cell; $target_col = $col if $cell->value() eq 'Target'; $response_col = $col if $cell->value() eq 'Response'; } if ( defined $target_col && defined $response_col ) { 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(); my $value = $lesk->getRelatedness( $target,$response ); print "Worksheet = $sheetname\n"; print "Row = $row\n"; print "Target = $target\n"; print "Response = $response\n"; print "Relatedness = $value\n"; } else { warn "\tWroksheet $sheetname,Row = $row doesn't contain target and response data.\n"; next ROW; } } } else { warn "\tWorksheet $sheetname: Didn't find Target and Response headings.\n"; next WORKSHEET; } }
那么,我的两个问题:
首先,有时程序会返回错误“文件中找不到Excel数据”,即使数据存在.每个Excel文件的格式都相同.只有一张纸,A和B列分别标有“目标”和“响应”,下面有一个单词列表.但是,它始终不会返回此错误.它适用于一个Excel文件,但它不适用于另一个Excel文件,即使两者的格式完全相同(并且是的,它们也是相同的文件类型).我找不到任何理由不读取第二个文件,因为它与第一个文件相同.唯一的区别是第二个文件是使用Excel宏创建的;但是,为什么会这么重要?文件类型和格式完全相同.
其次,变量’$target’和’$response’需要格式化为字符串,以便’my $value’表达式起作用.如何将它们转换为字符串格式?分配给每个变量的值是来自Excel电子表格的相应单元格的单词.我不知道是什么格式(并且在Perl中没有明显的方法可供我检查).
有什么建议?