perl 解析excel - 2007

前两天研究了用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 } }

你可能感兴趣的:(Excel,perl,文档,spreadsheet,archive)