07 October
2004

Spreadsheet::WriteExcel - Perl で Excel ファイルを出力

[Perl] 

Spreadsheet::WriteExcel という perl 用のモジュールがある。

昨日、会社経営している友人に出会い、色々と話をしたのだが、「Webシステムで Excel出力できたら便利やのにな」と言うので、ちょっと調べてあげることになった。もちろん、Perl で Excel ファイルを生成するライブラリの存在は知っていたので、あとは以下の点を調べる約束になった。

いつものように、FreeBSD の ports を使ってインストールする事にした。The CPAN Search Site にある、Spreadsheet::WriteExcel のバージョンは 2.11 であった。一方、ports にある Spreadsheet::WriteExcel のバージョンは 2.04である。まあそんなに違いは無いだろうと考えて ports からインストールした。


色々な理由があって、私のサーバでは Perl5.8 を使っている。 かなり前に記述したエントリにあるように、本格的に Unicode に対応したバージョンだ。cpan のマニュアルによると、Perl5.8 以降のバージョンでは Perl の UTF-8 文字列を write() メソッドで扱えるとある。しかしうまくいかない。cpan のマニュアルにある、write_unicode() を使ったサンプルと同じようなスクリプトではうまく出力できるのだが。(但し、フォントを Arial Unicode MS に指定しないとうまくいかない。実はこれで一時間程無駄にした。)

散々悩んだ挙句 CHANGES を読むと、以下の記述が目に入った。

2.10 September 23 2004 - Major

+ Added automatic Unicode handling via utf8 in perl 5.8 and later. Thanks Mark Fowler.

つまり、私のインストールしたバージョン 2.04 では対応していなかったのだ。(実は、過去にも同じような間違いを犯している)

結局 ports に頼らず、自力でインストール(といっても、perl Makefile.PL && make install で済むのだが)し、再挑戦。今度はうまくいった。

まあ、こういう失敗もやっておいたほうが良い。これで少しは学習しただろう。

Excelファイル出力するCGI (Perl5.8編)

せっかくなので、ソースを公開しておこう。あまり意味のある処理はやっていないが、何かの参考になるかと思う。(ソースは utf-8 で記述する事!!)

#!/usr/bin/perl

require 5.8.0;
use strict;

use utf8;
use Encode;

use CGI;
use Spreadsheet::WriteExcel;

print CGI::header(-type => 'application/vnd.ms-excel');

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

# 文字に指定するフォーマット
my $format = $workbook->add_format();
$format->set_font("MS PGothic");
$format->set_size(20);
$format->set_color('red');
$format->set_align('center');

# ワークシートを作成し、色々書き込んでみる
my $worksheet = $workbook->add_worksheet('test');
$worksheet->set_column(0, 0, 63); # カラム幅を指定

$worksheet->write(0, 0, "Perl は便利なんだよ", $format);

$worksheet->write_number('A2', 1.2345);
$worksheet->write_formula('A3', '=SIN(PI()/4)');

# Webへのリンク
$worksheet->write_url(3, 0, 'http://www.randynetwork.com/',
                      'ランディ・ネットワークの Webサイト', $format);

exit(0);

ちなみに、Drk7.jp というサイトにも、Perl で Excelデータを生成という記事があり、サンプルプログラムも掲載されている。これもおそらく、Spreadsheet::WriteExcel のバージョン 2.04なのであろう。あと、このやり方の場合、フォントは Arial Unicode MSでないとうまくいか無いが、2.11 だと MS PGothicだけでなく、MS PMinchoでもうまくいった。残念ながらその他の日本語フォントではうまくいかなかった。

Posted by Satoshi at 00:45 | Comments (0) | Trackbacks (0) | このエントリーを含むはてなブックマーク
Comments
There is no comment.
Trackbacks
Please send trackback to:http://www.randynetwork.com/blog/167/tbping
Perlを使ってExcelファイルにブログの記事情報を出力してみたい

Spreadsheet::WriteExcel - クロス・プラットフォームなExcelバイナリ・ファイルを出力


Spreadsheet::WriteExcel - Perl で Excel ファイルを出力


Spreadsheet::WriteExcel = Perl で Excel 出力


ここでつくったファイルを使ってデータベースをつくろうかと・・・

Posted by: RSS乱読日記 at November 27,2005 21:35
Post a comment