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

平台:mac

语言:perl

输入:.xlsx

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

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

代码如下:

#!/bin/perl
use strict;
use Spreadsheet::Read;
use Spreadsheet::XLSX;
use Perl6::Say;
use Encode;

# input all data, and define output xml file
my ( $src_dir, $dst_dir, $trans_file, $lan ) = @ARGV;
unless ( -d $src_dir ) {
	say "$src_dir is not dir";
	die ;
}
unless ( -d $dst_dir ) {
	mkdir $dst_dir;
}
unless ( -f $trans_file ) {
	say "translation file:$trans_file not exist";
	die ;
}

my $book = ReadData($trans_file);
my $info = $book->[0];
if ( my $err = $info->{'error'} ) {
	say 'err:' . $err;
	exit;
}

my $sheet_num = $info->{'sheets'};
foreach my $i ( 1 .. $sheet_num ) {
	my $sheet = $book->[$i];
	my $cells          = $sheet->{cell};
	my $maxrow         = $sheet->{maxrow};
	#define what to do
    }
}

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

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

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

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

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

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





你可能感兴趣的:(正则匹配,perl解析xlsx)