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

PERL 中 ParseExcel 兼容性到底怎么样。

发布时间:2020-12-15 20:52:50 所属栏目:大数据 来源:网络整理
导读:都说Perl中的ParseExcel很厉害,而且可以跨平台。最重要的是,与OLE的库相比,使用这个库的时候,可以不用关闭EXCEL正常使用。 一般用这个库读取小文件很有用,一般小型文件,用它都有效。但是这个库真的可以完全支持微软的Excel吗? 测试结论是可以,但最多

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

(编辑:李大同)

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

    推荐文章
      热点阅读