perl读取excel文件

发布时间:2020-06-08编辑:脚本学堂
对于xls,csv的文件处理,可以用到的模块有太多。
本文为大家总结一下perl读取excel文件的方法,感兴趣的朋友可以参考下。一、关于 Spreadsheet::Read 模块的用法 ,可以读

对于xls,csv的文件处理,可以用到的模块有太多。
本文为大家总结一下perl读取excel文件的方法,感兴趣的朋友可以参考下。

一、关于 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 $filen"; #记录有几个sheet

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

printf("%s - %2d: [%-s] %3d Cols, %5d Rowsn",
       $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: %sn", $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 ) => %sn", $row, $col, $cell->{Val});
            }
         }
    }
}

1.以hash结构的方式读出数据

总结:
方法还有很多,但是偶觉得还是第一个Spreadsheet::Read模块的用法最实用,至于原因,把2个数据的结果拿出来,就可以看明白了。