use strict;
use Spreadsheet::ParseExcel;
my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse('Book1.xls');
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;
print "Row, Col = ($row, $col)\n";
print "Value = ", $cell->value(), "\n";
print "Unformatted = ", $cell->unformatted(), "\n";
print "\n";
}
}
} 另外,在该网页上可以找到该模块的文件:
http://search.cpan.org/CPAN/authors/id/J/JM/JMCNAMARA/Spreadsheet-ParseExcel-0.59.tar.gz
这个压缩包包含了很多模块的样例代码。
5. 样例文件读取
首先建立一个只有4行1列的excel文件,进行尝试:
然后使用前面的样例代码,将'Book1.xls'替换为目标文件名,即可。显示中文乱码。
根据网上资料来看,excel的字符编码是unicode,一般使用如下代码进行解决:
my $formatter = Spreadsheet::ParseExcel::FmtUnicode->new(Unicode_Map=>"CP936");
my $workbook = $parser->parse('example.xls', $formatter); 完整代码如下:
#!/usr/bin/perl -w
use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::FmtUnicode;
my $parser = Spreadsheet::ParseExcel->new();
my $formatter = Spreadsheet::ParseExcel::FmtUnicode->new(Unicode_Map=>"CP936");
my $workbook = $parser->parse('example.xls', $formatter);
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;
print "Row, Col = ($row, $col)\n";
print "Value = ", $cell->value(), "\n";
print "\n";
}
}
}
<STDIN>; 注意所有需要安装的模块有如下几个:
Spreadsheet::ParseExcel:最开始安装的。
Unicode::Map:这个要安装一下,用于字符编码。
IO-stringy:这个已经安装过了,具体不清楚。
OLE-Storage_Lite:这个是访问office套件的需要的包。在安装Spreadsheet::ParseExcel被安装了。
这里只需要安装Unicode::Map即可。
上面代码显示结果正常:
此处可以发现,行和列的单元格的下标都是从0开始的。
6. 任务实现
词语的行从第8行开始(下标为7),列都在第2列(下标为1)。这样对代码略作修改,令$row_min=7,令$col_min=$col_max=1。修改目标文件名为'CorpusWordlist.xls'。输出结果如下:
从第7行到14635行,刚好14629行。
7. 文件
/Files/pangxiaodong/LearningPerl/Perl读取EXCEL词典文件.zip