Perl:使用Excel模块通过write_formula()读取string值

我是Perl新手,试图自动化一些testing用例。 我正在使用Spreadsheet :: WriteExcel和Spreadsheet :: ParseExcel模块。

我不能够读取特定的单元格值作为string,虽然当我在Windows中打开相同的.xls文件,我可以看到作为string(PASS / FAIL)的值。

我正在使用write_formula()方法来编写string。 我创build了一个示例项目来模拟相同的。 我已经尽可能地简化了。

关于下面的代码试图做什么的一点解释:

连续写下去=> 10 10 PASS 10 10 PASS

while循环控制了我们写了多less次10 10 PASS

第一个10是实际值,第二个10是预期值,然后使用公式通过或失败。

你可以请build议为什么我不能在下面的代码中使用value()方法读取PASS或FAIL作为string:

use strict; use warnings; use Spreadsheet::ParseExcel; use Spreadsheet::WriteExcel; use Spreadsheet::WriteExcel::Utility; my $filename = "sample.xls"; my $workbook = Spreadsheet::WriteExcel->new($filename); my $worksheet = $workbook->add_worksheet(); my $col = 0; my $row = 0; my $next_test_offset = 0; my $new_value_offset = 1; my $result_offset = 2; while($col < 2) { $worksheet->write($row, $col+$next_test_offset, 10); $worksheet->write($row, $col+$next_test_offset+$new_value_offset, 10); my $old_test_cell = xl_rowcol_to_cell($row, $col+$next_test_offset); my $new_test_cell = xl_rowcol_to_cell($row, $col+$next_test_offset+$new_value_offset); $worksheet->write_formula($row, $col+$next_test_offset+$result_offset, sprintf("=IF(%s<>%s, \"FAIL\", \"PASS\")", $old_test_cell, $new_test_cell)); $next_test_offset +=2; $col++; } $workbook->close(); my $parser = Spreadsheet::ParseExcel->new(); my $parser_workbook = $parser->parse($filename); if(!defined $parser_workbook) { die $parser->error(), ".\n"; } for my $parser_worksheet ($parser_workbook->worksheets()) { my ($row_min, $row_max) = $parser_worksheet->row_range(); my ($col_min, $col_max) = $parser_worksheet->col_range(); for my $row ($row_min .. $row_max) { for my $col ($col_min .. $col_max) { my $cell = $parser_worksheet->get_cell($row, $col); next unless $cell; print "Row: ", $row, " Col: ", $col, " Value: ", $cell->value(), "\n"; } } } 

编辑:忘记粘贴输出

 Row: 0 Col: 0 Value: 10 Row: 0 Col: 1 Value: 10 Row: 0 Col: 2 Value: 0 Row: 0 Col: 3 Value: 10 Row: 0 Col: 4 Value: 10 Row: 0 Col: 5 Value: 0 

期望的通行证在行:0上校:2和行:0上校:5

提前致谢! – 阿伦

这是一个logging的问题(请参阅http://search.cpan.org/~jmcnamara/Spreadsheet-ParseExcel-0.59/lib/Spreadsheet/ParseExcel.pm#KNOWN_PROBLEMS ):

除非用户在创build文件时指定了值(通常不是这种情况),否则该模块不能从Spreadsheet :: WriteExcel创build的文件中读取公式的值。

作为一个解决方法,你可以用等效的perl条件replace公式(例如$old_test_cell == $new_test_cell ? "PASS" : "FAIL") ,只需将计算得到的值作为一个简单值写入,而不是公式。