perl读取excel文件 | 您所在的位置:网站首页 › perl处理csv › 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个数据的结果拿出来后就可以看出来了 |
CopyRight 2018-2019 实验室设备网 版权所有 |