我很久没接触excel文件了,因为工作一直在linux下,基本用不到windows的东东。
最近需要读取一份excel文件,把每列的数据解析出来,单独放到一个文本文件里,文件名就是列的名字。
在metacpan.org上有蛮多解析excel的模块,我挨个试了下,发现就这个模块最好用:Spreadsheet::Read,它接口清晰,没那么复杂。
基于该模块,读取excel文件,并将每列提取出来,单独放到一个以列名命名的文本文件里。脚本内容如下:
use strict;
use Spreadsheet::Read;
use Data::Dumper;binmode(STDOUT, “encoding(UTF-8)”);
my $book = Spreadsheet::Read->new(“20201229.xls”);
my $sheet = $book->sheet(1);
my $max_col = $sheet->maxcol;for (1..$max_col) {
my @col = $sheet->column($_);
my $title = shift @col;
$title =~ s/\///g;
open HDW,”>”, “columns/$title.txt” or die $!;
binmode(HDW, “encoding(UTF-8)”);
print HDW $_,”\n” for @col;
close HDW;
}
它的含义很容易理解。
Spreadsheet::Read->new,这里读取excel表格文件。
$book->sheet(1),这里选取第一张工作簿。
$sheet->maxcol,这里得到最大列数。
然后进入一个循环,从第一列开始读,到最大列数终止。
$sheet->column($_),这里读取当前列的内容,返回的是一个数组。
my $title = shift @col,将上述数组的第一个元素弹出来,作为文本文件的名字。
$title =~ s/\///g,这里用了一个正则表达式,将文件名里的斜杠去掉。
接着,将剩下的数组内容,写入文本文件,从而实现每列的内容产生一个文件。
这个工作就完成了,可见perl读取excel还是简单好用的。