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