end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

Spreadsheet::WriteExcelでperlからexcelファイルに出力

http://d.hatena.ne.jp/end0tknr/20090111/1231635743

昨日、紹介したSpreadsheet::ParseExcelはexcelファイルの内容を読むmoduleですが、excelファイルに出力するmoduleにSpreadsheet::WriteExcelもあります。

http://search.cpan.org/perldoc?Spreadsheet::WriteExcel

機種依存文字出力ならEncode::decode("cp932",〜)

decode("cp932",〜)のようにcp932でEncode::decodeした結果をSpreadsheet::WriteExcelに与えると、機種依存文字も問題なく出力されます。

#!/usr/local/bin/perl

use strict;
use warnings;
use Encode;
use Spreadsheet::WriteExcel;
use Data::Dumper;

sub main {

    my $workbook  = Spreadsheet::WriteExcel->new("foo.xls");

    my $font_name = decode("cp932","MS Pゴシック");
    $workbook->{_formats}->[15]->set_properties(font  => $font_name,
						size  => 9,
						align => 'vcenter');

    my $worksheet = $workbook->add_worksheet( decode("cp932","シート1") );

    $worksheet->write(0,0, decode("cp932","excel"));
    $worksheet->write(1,0, decode("cp932","エクセル"));
    $worksheet->write(2,0, decode("cp932","エクセル"));
    $worksheet->write(3,0, decode("cp932","(株)㈱①"));

    $worksheet->write(4,0, 3.00001);
    $worksheet->write(5,0, 4);
    $worksheet->write(6, 0, '=A5+A6');

    $workbook->close;
}

main();


セルを結合するには、merge_range()

#セルを結合して、write
my $format = $workbook->add_format(border  => 6,
                                   valign  => 'vcenter',
                                   align   => 'center');
$worksheet->merge_range(8,1,10,2,
                        decode("cp932","(株)㈱①"),
                        $format);


cgi等の為に、標準出力へ直接?出力することもできます

Spreadsheet::WriteExcelは標準出力へも出力できますが、解説は割愛するので、詳細はcpanのドキュメントをご覧ください。

http://search.cpan.org/perldoc?Spreadsheet::WriteExcel

#例1
binmode(STDOUT);
my $workbook  = Spreadsheet::WriteExcel->new(\*STDOUT);

#例2
my $workbook  = Spreadsheet::WriteExcel->new('-');

#例3 mod_perl 2
tie *XLS => $r;  # Tie to the Apache::RequestRec object
binmode(*XLS);
my $workbook  = Spreadsheet::WriteExcel->new(\*XLS);

set_bg_color() や set_fg_color() で使える色は、docs/palette.html に記載

http://search.cpan.org/dist/Spreadsheet-WriteExcel/docs/palette.html
に次のような表が記載されています

javaexcel,wordの読み書きを行うには apache poi

参考までにjavaexcel,wordの読み書きを行うには apache poiというものがあるそうです。

http://poi.terra-intl.com/
http://poi.apache.org/