讀取excel檔案(使用perl處理)

2021-06-16 07:53:55 字數 2822 閱讀 8454

做了乙個簡單的處理excel檔案的perl程式,批量讀取其中的資料將其轉換csv檔案

**如下:

#!/usr/local/bin/perl

#########################################

#xlstocsv ver 0.2 ! #

#xls檔案轉換csv #

# #

#mail: #

#########################################

use strict;

use warnings;

use spreadsheet::parseexcel;

use spreadsheet::parseexcel::fmtunicode;

sub parse_excel else

return unless $filename||(ref($do_fuc) eq 'code');

my $excel = new spreadsheet::parseexcel;

my $code = "cp936"; #gb support

my $fmtgbk = spreadsheet::parseexcel::fmtunicode->new(unicode_map => $code); #gb support

my $book = $excel->parse($filename, $fmtgbk);

my($imaxrow,$imaxcol,@cols);

ewsfor: foreach my$worksheet (@}) ) ;

} else

erfor: for(my $ir = $worksheet->; $ir <= $imaxrow; $ir++) )

} else

$#cols = -1;

ecfor: for(my $ic = $worksheet->; $ic <= $imaxcol; $ic++) [$ir][$ic];

if($cell) else

}if( $do_fuc ) (@cols);

} else }}

}my (@xlsformats,$ttindex,$defindex);

sub readxlsformat($)

push @xlsformats, [$rs[0],@ri];

$ttindex = $#xlsformats if ($ttindex < 0)&&($rs[0] eq '#');

$defindex = $#xlsformats if ($defindex < 0)&&($rs[0] eq '*');

}close xfs;

$ttindex = $defindex if $ttindex < 0;

die "沒有格式標題!" if $ttindex < 0;

}sub cvtxlstocsv(@))$/\.csv/i;

open tocsv, ">$csvfile" or die "開啟檔案$csvfile失敗: $!";

parse_excel $xlsfile, sub ;

close tocsv;

}}sub writetocsv($@) 檔案失敗: $!";

print csvfile join(',',@[1..$#]),"\n";

foreach my$xlsfile(@_) if $xlsformats[$i][0] eq $xlsfile;

}$index = $defindex if $index < 0;

die "找不到對應xls檔案格式" if $index < 0;

my$ttl=0;

parse_excel $xlsfile, sub ;

my%xi = ();

my$i = 0;

foreach (@_) = $i if $_;

$i++;

}foreach $i(0..$#fi) if defined $xi;

}my$csvformat = "format csvfile=\n" . '@*,' x ($#fi+1);

$csvformat =~ s/,$/\n/;

foreach (@fi) else

}$csvformat =~ s/,$/\n\.\n/;

if($oldcsvfmt ne $csvformat) ;

$ttl++;

} else };}

close csvfile;

}my@extfs=();

my($fmtfl,$outfl)=("","");

if /^-o$/;

#選擇格式檔案

do if /^-f$/;

#幫助do if /^-\?/;

switch: ;

$argsta == 1 && do;

$argsta == 2 && do;}}

if($argsta < 0)

unless(@extfs)

}my @xlsfiles=sort glob join(' ',@extfs);

#刪除順序序列中的重複值

$prexls=$xlsfiles[$p2];

$p2++;

}} continue

$#xlsfiles=$p2-1;

}if($fmtfl) else else

}

Perl開啟讀取檔案

在perl中可以用open或者sysopen函式來開啟檔案進行操作,這兩個函式都需要通過乙個檔案控制代碼 即檔案指標 來對檔案進行讀寫定位等操作。下面以open函式為例 1 讀 open 檔案控制代碼,檔名 open 檔案控制代碼,檔名 前提檔案必須已經存在,否則會返回0,出錯資訊在 中。2 寫 o...

讀取Excel檔案

閒話一下excel中工作簿和工作表的區別 工作簿中包含有工作表。工作簿可以由一張或多張工作表組成,乙個工作簿就是乙個excel 檔案。好了,開始讀取 檔案吧。前提 首先,我們假設需要讀取的 檔案名字為test.xls,位於assets根目錄下。所需jar包 這裡為了能讀取到excel 檔案,我們要新...

Perl中對Excel的讀取處理

讀取excel中存放的使用者進行相關資訊匹配use spreadsheet parseexcel use encode my oexcel new spreadsheet parseexcel my obook oexcel parse filename my ir,owks,owkc my nnn...