我在使用Spreadsheet :: WriteExcel和公式方面遇到了困难VLOOKUP.以下测试脚本使用一些数据填充工作表并尝试创建VLOOKUP公式.当我打开生成的Excel文件时,公式结果显示为#VALUE!.如果我手动编辑任何包含公式的单元格(按F2然后只输入ENTER而不更改任何内容),我可以让Excel正确评估公式.知道出了什么问题吗?
对于它的价值,如果我在OpenOffice中打开相同的文件,公式工作正常.
use strict;
use warnings;
use Spreadsheet::WriteExcel;
my $wb = Spreadsheet::WriteExcel->new('foo.xls');
my $ws = $wb->add_worksheet;
for my $r (0 .. 9){
for my $c (0 .. 4){
$ws->write($r, $c, $r * 10 + $c);
}
$ws->write($r, 10, $r * 10);
my $formula = sprintf('=VLOOKUP(K%s, A1:B10, 2, FALSE)', $r + 1);
$ws->write( $r, 11, $formula );
# $ws->write_formula( $r, 11, $formula ); # Does not help either.
}
Run Code Online (Sandbox Code Playgroud)
版本信息:
我是Spreadsheet :: WriteExcel的作者.
这是公式解析器和WriteExcel中的某些公式类型的已知错误.你可以将它周围使用store_formula()和repeat_formula(),如下图所示:
use strict;
use warnings;
use Spreadsheet::WriteExcel;
my $wb = Spreadsheet::WriteExcel->new('foo.xls');
my $ws = $wb->add_worksheet;
my $formula = $ws->store_formula('=VLOOKUP(K1, A1:B10, 2, FALSE)');
# Workaround for VLOOKUP bug in WriteExcel.
@$formula = map {s/_ref2d/_ref2dV/;$_} @$formula;
for my $r (0 .. 9){
for my $c (0 .. 4){
$ws->write($r, $c, $r * 10 + $c);
}
$ws->write($r, 10, $r * 10);
$ws->repeat_formula( $r, 11, $formula, undef, qr/^K1$/, 'K' . ($r +1) );
}
Run Code Online (Sandbox Code Playgroud)