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语言垃圾回收工作。

标签