当我们在处理很多xls表的时候,特别是数据汇总,你要将所有的数据全部汇总在一起并且导成txt的格式。
这里为大家举个例子,供大家学习参考:
需要安装的模块:
IO::stringy ;
IO::scalar ;
Spreadsheet::Read .
完整例子
#!/usr/bin/perl
use File::Find;
use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::FmtUnicode;
my $oExcel = new Spreadsheet::ParseExcel;
open IN,'>>E:/wangli.txt' or die "$!"; #将数据导到这个文件中,追加的形式
sub print_path #创建子程序,用于抓取所以 为 .xls的文件名(绝对路径)
{
my $file = $_;
if ( $file =~ /.xls$/ )
{
$lpath = $File::Find::name;
push( @lpath, $lpath );
}
}
find( &print_path, "E:/" ); #对指定的目录进行查询,比如 E盘
foreach my $path (@lpath) {
#die "You must provide a filename to $0 to be parsed as an Excel file" unless @ARGV;
#set for charactor
my $oFmtC = Spreadsheet::ParseExcel::FmtUnicode->new(Unicode_Map=>"CP936"); #进行字符编码指定,中文就不会是乱码了。
my $oBook = $oExcel->Parse($path,$oFmtC); # 将获取的文件进行处理。
my($iR, $iC, $oWkS, $oWkC);
print "FILE :", $oBook->{File} , "n";
print "COUNT :", $oBook->{SheetCount} , "n";
print "AUTHOR:", $oBook->{Author} , "n"
if defined $oBook->{Author};
for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++)
{
$oWkS = $oBook->{Worksheet}[$iSheet];
#print "--------- SHEET:", $oWkS->{Name}, "n";
for(my $iR = $oWkS->{MinRow} ;
defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ;
$iR++)
{
for(my $iC = $oWkS->{MinCol} ;
defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ;
$iC++)
{
$oWkC = $oWkS->{Cells}[$iR][$iC];
print IN $oWkC->Value, "t" if($oWkC);
}
print IN "n"
}
}
}
close IN;
大致如上所示,数据出来以后,数据的格式就是以制表符分割的txt文件了。