微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PERL 中 ParseExcel 兼容性到底怎么样

都说Perl中的ParseExcel很厉害,而且可以跨平台。最重要的是,与OLE的库相比,使用这个库的时候,可以不用关闭EXCEL正常使用。

一般用这个库读取小文件很有用,一般小型文件,用它都有效。但是这个库真的可以完全支持微软的Excel吗?

测试结论是可以,但最多只能完美读出Excel4.0的xlw格式,连Excel5.0格式都不能完全读出!

 

 

测试用代码

###ParseExcel.pl测试例子。

#!/usr/bin/perl

use strict;
use Spreadsheet::ParseExcel;
use MyExcelFormatter;
 

my $parser   = Spreadsheet::ParseExcel->new();
my $fmt = new MyExcelFormatter();
my $workbook = $parser->parse('test1.xls',$fmt);

if ( !defined $workbook ) {
    die $parser->error(),"./n";
}
for my $worksheet ( $workbook->worksheets() ) {

    my ( $row_min,$row_max ) = $worksheet->row_range();
    my ( $col_min,$col_max ) = $worksheet->col_range();

    for my $row ( $row_min .. $row_max ) {
        for my $col ( $col_min .. $col_max ) {

            my $cell = $worksheet->get_cell( $row,$col );
            next unless $cell;
      #if($cell->value()=~m/锋/){
             print "Row,Col    = ($row,$col)/n";
             print "Value       = ",$cell->value(),       "/n";
             print "/n";
            #}
        }
    }
}

###END

 

###一个显示中文的库,放在lib/下

###MyExcelFormatter.pm

package MyExcelFormatter;

use strict;
use warnings;

use base qw(Spreadsheet::ParseExcel::FmtDefault);

use Encode::CN;
use Encode qw(from_to);

sub new() {
    return bless {};
}

sub TextFmt( $;$ ) {
    my $this = shift;
    my ($value,$code) = @_;

    if ( defined $code and $code eq 'ucs2' ){
        from_to( $value,'ucs2','gb2312' );
    }
    return $value;
}
1;

###END

测试文件就不传了。你们可以自己用一些在XLS里插入OLE对象的文件试一试就知道了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐