Perl Excel模块(二)Spreadsheet::Write
Perl语言之中excel表格操作模块是分开的,write模块是一个新出的模块,之前的写操作模块xls和xlsx是分开的。而write模块可以兼容两种类型。
名称
Spreadsheet::Write——用来写入电子表格文件的模块(例如xlsx、xls、csv等)。
例子
基本使用方法:
use Spreadsheet::Write;
my $sp=Spreadsheet::Write->new(file => 'test.xlsx');
$sp->addrow('hello','world');
$sp->close();
其他使用方法:
use Spreadsheet::Write;
my $sp=Spreadsheet::Write->new(
file => $ARGV[0], # eg. test.xls, test.xlsx, or test.csv
sheet => 'Test Data',
styles => {
money => {
format => '$#,##0.00;-$#,##0.00',
},
bright => {
font_weight => 'bold',
font_color => 'blue',
font_style => 'italic',
},
},
);
$sp->addrow(
'col1',
{ content => [ 'col2', 'col3', 'col4' ], style => 'bright' },
{ content => 'col5', bg_color => 'gray' },
'col6',
);
$sp->freeze(1,0);
$sp->addrow(
{ content => [ 1, 1.23, 123.45, -234.56 ], style => 'money' },
);
my @data=(
[ qw(1 2 3 4) ],
[ qw(a s d f) ],
[ qw(z x c v b) ],
# ...
);
foreach my $row (@data) {
$sp->addrow({ style => 'ntext', content => $row });
}
$sp->close();
描述
Spreadsheet::Write可以执行文件写操作,比如CSV, XLS (Microsoft Excel 97),XLSX(Microsoft Excel 2007),以及其他已经存在driver(特指一类底层的Perl模块)的文件类型。Write模块特别适合于用数组之类的存在队列的数据编写表格、报告。
write模块中的格式设置、参数选项是适用于任何类型的文件导出的。如果这个类型不支持某一操作,将会忽略掉它。(这是官方文档的翻译,大意就是任何参数你都可以写,不会因为你填错了就报错的。但是,想CSV这种格式的文件,如果你设置了表格颜色、字体颜色之类的,它本身就不支持,会自己忽略掉)。
方法
new()
$spreadsheet = Spreadsheet::Write->new(
file => 'table.xls',
styles => {
mynumber => '#,##0.00',
}
);
创建一个新的电子表格对象。他有一些可以设置的参数:
file 文件名或IO句柄
encoding 输出文件编码格式(只对CSV有效,可不设置)
format 文件类型 - 'csv', 'xls', 'xlsx', 'auto' (默认)
sheet sheet名称(可选)
styles 快速定义所有单元格的默认格式(可选)
如果format设置为auto,模块会根据文件扩展名判断格式。如果你没有写扩展名,默认会保存一个csv文件。
IO::File, IO::Scalar等模块产生的IO句柄可以作为file参数。这种情况下格式是强制的。
styles参数默认的变量值是:
header => { font_weight => 'bold', type => 'string',
}, ntext => { format => '@', type => 'string', }, money => { format =>
'$#,##0.00;-$#,##0.00', }
addrow(arg1,arg2,…)
增加一行数据到表格中。参数可以单元格的值、字符串或者是一个散列引用。当参数是一个散列时,它需要设置的键如下:
content 设置单元格的值
style 格式设置,类似new()方法中的styles,可以是标量或数组引用
type content参数的类型 (默认 'auto')
format 数字格式 (请查阅 Spreadsheet::WriteExcel 模块文档)
font_weight 字体大小. 只有一个值 'bold'
font_style 字体风格. 只有一个值 'italic'
font_decoration 'underline' 或 'strikeout' (可同时用,空格分隔)
font_face font of column; 默认为 'Arial'
font_color 字体颜色 (see Spreadsheet::WriteExcel for color values)
font_size size of font
bg_color color of background (请查阅 Spreadsheet::WriteExcel )
align 布局格式
valign 垂直布局
width 列宽
height 行高
comment 提示
可以在new()设置styles参数,在new()设置的style是全局默认设置。
例子:
my $sp=Spreadsheet::Write->new(
file => 'employees.xlsx',
styles => {
header => { font_weight => 'bold' },
},
);
$sp->addrow(
{ content => 'First Name', font_weight => 'bold' },
{ content => 'Last Name', font_weight => 'bold' },
{ content => 'Age', style => 'header' },
);
$sp->addrow("John","Doe",34);
$sp->addrow("Susan","Smith",28);
注意这个例子中,即使每个单元格都自己设置了风格——或是直接设置了或是使用了标题风格,标题行所有的单元格还是有一个明显、统一的格式。
如果你想将一个数字作为字符串存放在单元格这种,可以这样配置参数{ type => ‘string’, format => ‘@’ }。关于默认的单元格类型,是通过Spreadsheet::WriteExcel的write()方法自动检测的。
当content参数中是一个数组引用时,将代表一系列的单元格,后面其他参数的设置,会让这些单元格保持统一的风格样式。这种设置方法通常用来设置标题行,就像下面的例子:
$sp->addrow(
{ style => 'header',
content => [ 'First Name','Last Name','Age' ],
}
);
再次提醒一下,不是所有的参数都管用。文件类型会忽略掉不支持的参数。
addrows([$cell1A,$cell1B,…],[$cell2A,$cell2B,…],…)
添加多行单元格的快捷方式。每一个参数是一个数组引用,代表了一行单元格。
注意,如果使用参数不是一个引用,比如说设置了一个标量,那么这个参数会导致新创建一个sheet表并作为sheet表的标题。
freeze($row, $col, $top_row, $left_col))
在参数指定的位置冻结单元格。CSV类型文件无效。
close ()
关闭文件。请注意,用完本模块后要记得调用close方法,这有利于perl语言垃圾回收工作。