有个任务需要读好多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";
}
}