Csv2Xlsx (Perl 实现)

用 Perl 实现 Csv 到 Xlsx 的格式转换,支持长数字 。

** 文章“xlsx、xls、csv 间格式转换的.vbs代码”, 虽实现了 Excel2Csv, Excel2Xls 和Excel2Xlsx, 但它对 长数字 的处理仍有所不足。

# filename: csv2xlsx.pl
# Functin: Trans .csv File to .xlsx 
#
# Env: Windows, strawberry-perl-5.xx, https://strawberryperl.com/releases.html
# Module install:
#	C:\>cpanm Text::CSV
#	C:\>cpanm Excel::Writer::XLSX
#	C:\>cpanm Spreadsheet::WriteExcel
#
# csv2xlsx.pl => csv2xlsx.BAT :  c:\> Pl2BAT %xxPath%\csv2xlsx.pl 
# Usage:  
#    csv2xlsx.pl    < abc.csv > anyany.xlsx
#    csv2xlsx[.BAT] < abc.csv > anyany.xlsx
#
my ($FS) =(',');	# 定义CSV输入、输出分隔符
#	my @strRow= qw/ 0 /;		# 定义以string格式输出的“行”, 才能将长数字显示出来
#	my @strCol= qw/ 0 3 6 /;	# 定义以string格式输出的”列“, 才能将长数字显示出来
#
use Spreadsheet::WriteExcel;
use Excel::Writer::XLSX;
use Encode qw/encode decode/;
use Text::CSV;		# 支持 Field 带","号
my $csv=Text::CSV->new({
	binary=>1,
	auto_diag=>1,
	sep_char=>$FS	# not really needed as this is the default//if is ","
});

#	my %strRow,%strCol;
#	foreach (@strRow) {
#		$strRow{$_}="string"; 
#	}
#	foreach (@strCol) {
#		$strCol{$_}="string"; 
#	}

 open my $fh, '>', \my $str_To_STDOUT or die "Failed to open filehandle: $!";
 my $workbook = Excel::Writer::XLSX->new($fh);
 
# Add a worksheet
$worksheet = $workbook->add_worksheet();

my $row = 0;
while ( my $fields=$csv->getline(STDIN) ){
	chomp $line;
	my $col=0;
	while ( my $fld = $fields->[$col] ) {
		#		MethodXX: 根据 输出单元 长度,决定是否以 string 格式输出
		{
			if ( length $_ > 11 ) {
				$worksheet->write_string($row, $col, decode("gbk",$fld));
			} else {
				$worksheet->write($row, $col, decode("gbk",$fld));
			}
		# --------------------------------------------------
				$col+=1;
		}
	}
	$row+=1;
}
$workbook->close();

# 用 STDOUT 作为输出:
 binmode STDOUT;
 print $str_To_STDOUT;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值