ActivePerl 读写Excel文件

 我是个好奇的人,对于比较陌生的东西也喜欢去尝试下。有一次看GF在对财务报表,这些报表数据全在Excel里面,数据量还比较多,但是并不复杂。只是对比下两个报表的数据项是否一致。这个工作难道还要人来做吗?难道不可以用Perl来实现吗,我想到了Perl语言的名称定义:实用报表提取语言。真是恰到好处。

但说实在,本人水平还没有达到这种解决实际问题的地步,但是安装下,还是不成问题的。至少我想看下ActivePerl 是如何读写Excel文件的。看看它使用什么模块,再看看这个模块文档,似乎就可以解决实际问题了。

在Windows上安装ActivePerl所需要的读取Excel文件一般用Win32::OLE之类的,但对于跨平台来说,还是选择另外的Spreadsheet::ParseExcel及Spreadsheet::WriteExcel最好。从名字来看,前者是读Excel文件用的。

安装:

 

  
  
  
  
  1. ppm install OLE::Storage_Lite #如果不安装这个,后面两个安装不了 
  2.  
  3. ppm install Spreadsheet::ParseExcel 
  4.  
  5. ppm install Spreadsheet::WriteExcel 

这时在你的./site/lib/目录下,多了一些模块。

为了满足自己的好奇心,赶紧查看了pod文档:

 

  
  
  
  
  1. perldoc Spreadsheet::ParseExcel 

通过文档的描述部分,了解到Spreadsheet::ParseExcel只能读95-2003格式的Excel文档,对于office 2007 Excel则要安装Spreadsheet::XLSX。运行下文档中的示例,先睹为快:


  
  
  
  
  1. use strict; 
  2. use Spreadsheet::ParseExcel; 
  3.  
  4. my $parser   = Spreadsheet::ParseExcel->new(); 
  5. my $workbook = $parser->parse('Book1.xls'); 
  6.  
  7. if ( !defined $workbook ) { 
  8.     die $parser->error(), ".\n"
  9.  
  10. for my $worksheet ( $workbook->worksheets() ) { 
  11.  
  12.     my ( $row_min$row_max ) = $worksheet->row_range(); 
  13.     my ( $col_min$col_max ) = $worksheet->col_range(); 
  14.  
  15.     for my $row ( $row_min .. $row_max ) { 
  16.         for my $col ( $col_min .. $col_max ) { 
  17.  
  18.             my $cell = $worksheet->get_cell( $row$col ); 
  19.             next unless $cell
  20.  
  21.             print "Row, Col    = ($row, $col)\n"
  22.             print "Value       = "$cell->value(),       "\n";             
  23.             print "\n"
  24.         } 
  25.     } 


如果只是简单的读取数据,相对比较的简单,但是如果要格式化表里面的数据,那真不是几分钟能搞定的事。想想GF那些财务数据还真是有点难度的。留着以后研究吧。毕竟现在只是好奇而已。






 

你可能感兴趣的:(Excel,职场,perl,休闲,ActivePerl)