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