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
に次のような表が記載されています