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对象的文件试一试就知道了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值