excel转txt工具

    有个任务需要读好多eccel,实际读起来并不方便,变手工把ecxcel转换成文本文档,心累。。。。于是闲暇写了个ecxcel转txt的小工具。主要是用的Spreadsheet::XLSX。

use strict;
use warnings;
use strict;
use Spreadsheet::XLSX;
die "Usage :perl $0 <xlsx> <resultDIR>\n" unless @ARGV==2; ####需要输入需要转换的ecxel文件 以及生成结果文件的路径
my $file=shift @ARGV;
my $dir=shift @ARGV;
my $excel=Spreadsheet::XLSX->new($file);
foreach my $sheet(@{$excel->{Worksheet}}){
          my $name=$sheet->{Name};###sheet名字
         open OUT,">$dir/$name.txt";##默认结果是一个sheet转换成一个文本文档,名字为sheet名字 ,可自行调整
         $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){
                              print OUT"$cell->{Val}\t";
                            }
                   }
                  print OUT"\n";
      }
}

写完之后,发现每次只能转换一个文件,于是就把它做成了一个包,名字为excel2txt.pm,随便用~

主程序perl.pl

use strict;
use warnings;
use package::excel2txt;
my $dir="/home/escel2txt";
my @sample=("test");
foreach my $sample(@sample){
          my $file="$dir/$sample.xlsx";
          my $reportdir="/home/escel2txt";
         package::excel2txt::change($file,$reportdir);##在report下批量生成转换过后的文档
}

包:excel2txt.pm

package package::excel2txt;

use strict;
use warnings;
use strict; 
use Spreadsheet::XLSX;

sub change{
my $file=shift @_;
my $dir=shift @_;
my $excel=Spreadsheet::XLSX->new($file);
  foreach my $sheet(@{$excel->{Worksheet}}){
          my $name=$sheet->{Name};###sheet名字
         open OUT,">$dir/$name.txt";##默认结果是一个sheet转换成一个文本文档,名字为sheet名字 ,可自行调整
         $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){
                              print OUT"$cell->{Val}\t";
                            }
                   }
                   print OUT"\n";
          }
     }

}

1

posted @ 2017-05-22 15:14  平果花  阅读(1254)  评论(0编辑  收藏  举报