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那些財務數據還真是有點難度的。留着以後研究吧。畢竟現在只是好奇而已。






 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章