加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何让Perl的Spreadsheet :: WriteExcel用VLOOKUP创建公式?

发布时间:2020-12-15 23:24:53 所属栏目:大数据 来源:网络整理
导读:我在 Spreadsheet::WriteExcel和使用VLOOKUP的公式方面遇到了困难.以下测试脚本使用一些数据填充工作表,并尝试创建VLOOKUP公式.当我打开生成的Excel文件时,公式结果显示为#VALUE!.如果我手动编辑任何包含公式的单元格(按F2然后只输入ENTER而不更改任何内容)
我在 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) );
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读