我在
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,$formula ); # Does not help either. }
版本信息:
> Excel 2007 SP2.
> Spreadsheet :: WriteExcel:尝试了2.25和2.37.
解决方法
我是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,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,$r * 10); $ws->repeat_formula( $r,$formula,undef,qr/^K1$/,'K' . ($r +1) ); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。