我正在尝试自动化一些测试用例。我正在使用 Spreadsheet::WriteExcel 和 Spreadsheet::ParseExcel 模块。
我无法将特定的单元格值读取为字符串,但当我在 Windows 中打开相同的 .xls 文件时,我可以将值视为字符串(PASS/FAIL)。
我正在使用 write_formula() 方法来编写字符串。我创建了一个示例项目来模拟相同的。我已经尽可能简单了。
关于下面的代码试图做什么的一点解释:
将以下内容连续写入 => 10 10 PASS 10 10 PASS
while 循环控制我们写 10 10 PASS 的次数
第一个 10 是实际值,第二个 10 是预期值,然后使用公式通过或失败。
您能否建议为什么我不能在下面的代码中使用 value() 方法将 PASS 或 FAIL 作为字符串读取?
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 Col:2 和行:0 Col:5 的预期 PASS