您的位置:首页 > 其它

perl读写Excel

2016-06-27 17:25 369 查看
最近学习了使用perl制作一个Excel文件,使用Spreadsheet模块写03版Excel时新建一个Excel文件。

#!/usr/bin/perl -w
use strict;
use Spreadsheet::ParseExcel;
use Spreadsheet::WriteExcel;
use Spreadsheet::ParseExcel::FmtUnicode;

####读Excel
my $parser = Spreadsheet::ParseExcel->new();
##对Excel内中文字符进行字符编码指定,防止乱码
my $formatter = Spreadsheet::ParseExcel::FmtUnicode->new(Unicode_Map=>"CP936");
my $workbook = $parser->parse('hello.xls', $formatter);
if(!defined $workbook){
die $parser->error(), "\n";
}

for my $worksheet($workbook->worksheets()){
##行号的最小值和最小值
my ($row_min, $row_max) = $worksheet->row_range();
##列号的最小值和最大值
my ($col_min, $col_max) = $worksheet->col_range();

for my $row ($row_min..$row_max){
for my $col ($col_min..$col_max){
my $cell = $worksheet->get_cell($row, $col);
next unless $cell;

print "Value=", $cell->value(), "\n";
}
}
}

-----------------------------------------------------------------------------------------

####写Excel
##创建一个新的xls文件,该模块只能先新建后写,不能对已有文件进行修改
my $workbook = Spreadsheet::WriteExcel->new('newexcel.xls');
##新建一个sheet,可以在括号内加入sheet名称,若不加,默认为sheet1
my $worksheet = $workbook->add_worksheet();

#设置表头字体格式
my $format_head = $workbook->add_format(
##为了避免字符串中数字使用原格式,使用@设置数字的默认格式同文字格式
num_format   => '@',
##设置字体格式为黑体
font      => decode("cp936", "黑体"),
bold      => 1,                         ##加粗
align     => 'center',                  ##居中
border       => 1                       ##边界框线
);
#设置字体格式
my $format_1 = $workbook->add_format(
num_format   => '@',
size         => 10,
font         => decode("cp936", "宋体"),
border       => 1,
align        => 'center',
);
##设置数字格式
my $format_2 = $workbook->add_format(
##数字保留两位有效小数,0.00_下划线后必须加空格
num_format   => '0.00_ ',
size         => 10,
font         => 'Arial',
border       => 1,
align        => 'center',
);
##此外还可以设置字体颜色,背景颜色等
###设置每一列宽度
$worksheet->set_column('A:A', 20);
$worksheet->set_column('B:B', 21);
##合并第一行AB列
$worksheet->merge_range('A1:B1', decode("cp936", "表格"), $format_head);
$worksheet->write(1, 0, decode("cp936", "第一行"), $format_1);
$worksheet->write('B2', 112, $format_2);

##关闭workbook
$workbook->close();


在写Excel时,若需要合并某些行或某些列,需单独为其设置字体格式,不能使用未合并行和列的格式,否则会报以下错误。

Error: refer to merge_range() in the documentation.

Can’t use previously merged format in non-merged cell at XXXX.

写Excel结束时,需要关闭workbook,读Excel时则不需要。

更多方法可以使用命令perldoc Spreadsheet::WriteExcel 或 perldoc Spreadsheet::ParseExcel查看具体内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  perl excel spreadsheet