perl讀取excel文件

  --這裏所有的perl技術問題都是我平常處理數據的時候要用到的,可能不是很強的程序,但是希望能和熱愛perl的同志,一起分享...

對於xls,csv的文件處理,可以用到的模塊有太多,今天學習和總結了下,下面就介紹幾種比較常用的:

 

 一.關於 Spreadsheet::Read 模塊的用法 ,可以讀取xls,csv和sxc等格式的文件,方法如下

#!/usr/bin/perl
    use Spreadsheet::Read;

    my $file = 'd:/Book1.xls'; #需要處理的文件
    my $spreadsheet = ReadData ($file) or die "$!";
    my $sheet_count = $spreadsheet->[0]{sheets} or die "No sheets in $file/n"; #記錄有幾個sheet


  for my $sheet_index (1 .. $sheet_count)
  {
  $sheet = $spreadsheet->[$sheet_index] or next; 

   printf("%s - %2d: [%-s] %3d Cols, %5d Rows/n",
             $file,$sheet_index,$sheet->{label},$sheet->{maxcol},$sheet->{maxrow});

    for my $row (1 .. $sheet->{maxrow}) {
   print join "/t" => map {$sheet->{cell}[$_][$row] // "-" } 1 .. $sheet->{maxcol};
   print "/n"
                                         };

   }

1.這個程序是將數據以行的形式進行的讀取,這樣也使得文件可以輕鬆轉換成txt文件

2.其中 有行的程序爲:

  print join "/t" => map {$sheet->{cell}[$_][$row] // "-" } 1 .. $sheet->{maxcol};
// 表示爲 defined-or,是使用了perl 6的方法,即如果在取值的地方取到空值,幾沒有取到值,則用 - 標識這個地方.

這個代碼塊也能換成

print join "/t" => map {

my $data = $sheet->{cell}[$_][$row] defined $data ? $data : "-";

}1 .. $sheet->{maxcol};

 

二.關於 Spreadsheet::ParseExcel的用法

 

#!/usr/bin/perl
   use strict;
   use Spreadsheet::ParseExcel;
   use Spreadsheet::ParseExcel::Workbook;


    my $excel = Spreadsheet::ParseExcel::Workbook->Parse("d:/Book1.xls" );
    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) {
                   printf("( %s , %s ) => %s/n", $row, $col, $cell->{Val});

 

                }
            }
        }
    }

1.以hash結構的方式讀出數據

總結:

還有很多方法,但是本人覺得還是第一個Spreadsheet::Read模塊的用法最實用,至於原因吧2個數據的結果拿出來後就可以看出來了

發佈了71 篇原創文章 · 獲贊 1 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章