如何使用perl解析excel2007
前两天研究了用Spreadsheet::ParseExcel 解析excel 。但这个模块只支持2003及一下的文件。
今天又继续研究了解析2007的方法。
首先安装包
- Archive::Zip -- 1.30
- Compress-Raw-Zlib-2.026
这两个依赖包安装完毕之后,就用到主要的包:Spreadsheet::XLSX
解析的时候,同样遇到中文的问题。这时需要用use Encode 实现从 utf8 -> gbk(gb2312) 的转换。
代码基本是抄官方文档的。 我的excel文件就一个sheet。
一共两行(第一行是title),每行三列;这样的正规文件没发现问题。
整个代码如下
- use strict;
- use warnings;
- use Spreadsheet::XLSX;
- use Encode;
- #my $converter = Text::Iconv -> new ("utf-8", "windows-1251");
- #my $excel = Spreadsheet::XLSX -> new ('test.xlsx', $converter);
- my $excel = Spreadsheet::XLSX -> new ('test.xlsx');
- foreach my $sheet (@{$excel -> {Worksheet}}) {
- printf("Sheet: %s\n", $sheet->{Name});
- $sheet -> {MaxRow} ||= $sheet -> {MinRow};
- foreach my $row ($sheet -> {MinRow} .. $sheet -> {MaxRow}) {
- $sheet -> {MaxCol} ||= $sheet -> {MinCol};
- foreach my $col ($sheet -> {MinCol} .. $sheet -> {MaxCol}) {
- my $cell = $sheet -> {Cells} [$row] [$col];
- if ($cell) {
- my $a = $cell->{Val};
- $a = encode("gbk", decode("utf8", $a));
- #printf("( %s , %s ) => %s\n", $row, $col, $a);
- printf("$a ");
- }
- }
- print "\n"; ## one row over
- }
- }
- 本文转自:http://blog.csdn.net/Aylazhang/archive/2010/04/11/5471074.aspx