gpt4 book ai didi

excel - 使用 Excel 模块通过 write_formula() 将单元格值读取为字符串集

转载 作者:行者123 更新时间:2023-12-02 20:30:56 28 4
gpt4 key购买 nike

我正在尝试自动化一些测试用例。我正在使用 Spreadsheet::WriteExcel 和 Spreadsheet::ParseExcel 模块。

我无法将特定单元格值作为字符串读取,但当我在 Windows 中打开相同的 .xls 文件时,我可以看到该值作为字符串(通过/失败)。

我正在使用 write_formula() 方法来写入字符串。我创建了一个示例项目来模拟相同的情况。我已使其尽可能简单。

稍微解释一下下面的代码试图做什么:

连续写下以下内容 => 10 10 PASS 10 10 PASS

while循环控制我们写入10 10 PASS的次数

第一个 10 是实际值,第二个 10 是期望值,然后使用公式得出 PASS 或 FAIL。

您能告诉我为什么我无法使用下面代码中的 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 列:2 和行:0 列:5 处的预期通过

最佳答案

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

This module cannot read the values of formulas from files created with Spreadsheet::WriteExcel unless the user specified the values when creating the file (which is generally not the case).

作为解决方法,您可以将公式替换为等效的 Perl 条件(例如 $old_test_cell == $new_test_cell ? "PASS": "FAIL") 并将计算值写为简单值,而不是作为公式。

关于excel - 使用 Excel 模块通过 write_formula() 将单元格值读取为字符串集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18979665/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com