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个数据的结果拿出来后就可以看出来了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值