perl解析xlsx文件生成xml与json格式文件

2016-07-18 11:01:04来源:oschina作者:炉边故事人点击

平台:mac


语言:perl


输入:.xlsx


输出:.xml、.json、.txt、.xlsx


利用Spreadsheet::Read和Spreadsheet::XLSX解析xlsx格式文件非常方便,只需要理解模块处理方式,就可以生成我们需要 的格式文件,在此处应注意两个问题:1 解析出来的xlsx内容编码格式 2 生成文件的编码格式,事先确定这两个问题可以避免很多不必要的麻烦,如乱码,中文正则匹配等,


代码如下:


#!/bin/perl
usestrict;
useSpreadsheet::Read;
useSpreadsheet::XLSX;
usePerl6::Say;
useEncode;
#inputalldata,anddefineoutputxmlfile
my($src_dir,$dst_dir,$trans_file,$lan)=@ARGV;
unless(-d$src_dir){
say"$src_dirisnotdir";
die;
}
unless(-d$dst_dir){
mkdir$dst_dir;
}
unless(-f$trans_file){
say"translationfile:$trans_filenotexist";
die;
}
my$book=ReadData($trans_file);
my$info=$book->[0];
if(my$err=$info->{'error'}){
say'err:'.$err;
exit;
}
my$sheet_num=$info->{'sheets'};
foreachmy$i(1..$sheet_num){
my$sheet=$book->[$i];
my$cells=$sheet->{cell};
my$maxrow=$sheet->{maxrow};
#definewhattodo
}
}

得到sheet后以行为单位,然后处理自己的逻辑即可,常见的几个问题:


A 多个字符串组合后有各自的编码,通常GBK编码的中文正则匹配/[/x80-/xFF]/


B 从模块中读sheet数据,会默认window中office已有编码


C perl会"自主"选择开启字节流utf8编码格式,on || off,可以先判断是哪种状态,如果语言没有内部实现编码的读写格式,则需要自己手动去设置


D 区分读写excel版本,引用模块的不同,及扩展名xls与xlsx不同


E encode与decode函数对应解析与输出,错误使用会造成乱码,Wide character等错误


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台