注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

wangyufeng的博客

祝愿BB 健康开心快乐每一天

 
 
 

日志

 
 

如何使用perl解析excel2007  

2010-11-01 12:56:09|  分类: Perl & bioperl |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

前两天研究了用Spreadsheet::ParseExcel 解析excel 。但这个模块只支持2003及一下的文件。

今天又继续研究了解析2007的方法。

首先安装包

  1. Archive::Zip --  1.30  
  2. Compress-Raw-Zlib-2.026  
Archive::Zip -- 1.30 Compress-Raw-Zlib-2.026

这两个依赖包安装完毕之后,就用到主要的包:Spreadsheet::XLSX

解析的时候,同样遇到中文的问题。这时需要用use Encode 实现从 utf8 -> gbk(gb2312) 的转换。

代码基本是抄官方文档的。 我的excel文件就一个sheet。

一共两行(第一行是title),每行三列;这样的正规文件没发现问题。

整个代码如下

  1. use strict;  
  2. use warnings;  
  3. use Spreadsheet::XLSX;  
  4. use Encode;  
  5. #my $converter = Text::Iconv -> new ("utf-8", "windows-1251");  
  6. #my $excel = Spreadsheet::XLSX -> new ('test.xlsx', $converter);  
  7. my $excel = Spreadsheet::XLSX -> new ('test.xlsx');  
  8. foreach my $sheet (@{$excel -> {Worksheet}}) {  
  9.         printf("Sheet: %s\n"$sheet->{Name});  
  10.         $sheet -> {MaxRow} ||= $sheet -> {MinRow};  
  11.         foreach my $row ($sheet -> {MinRow} .. $sheet -> {MaxRow}) {  
  12.                 $sheet -> {MaxCol} ||= $sheet -> {MinCol};  
  13.                 foreach my $col ($sheet -> {MinCol} ..  $sheet -> {MaxCol}) {  
  14.                         my $cell = $sheet -> {Cells} [$row] [$col];  
  15.                         if ($cell) {  
  16.                                 my $a = $cell->{Val};  
  17.                                 $a = encode("gbk", decode("utf8"$a));  
  18.                                 #printf("( %s , %s ) => %s\n", $row, $col, $a);  
  19.                                 printf("$a ");  
  20.                         }  
  21.                 }  
  22.                 print "\n"## one row over  
  23.         }  

  24. 本文转自:http://blog.csdn.net/Aylazhang/archive/2010/04/11/5471074.aspx
  评论这张
 
阅读(2118)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017