Spreadsheet::WriteExcel = Perl で Excel 出力
業務系アプリを書いていると、csv 出力ぢゃなくて、Excel データそのものを出力できたらなぁ・・・と思うことがあると思います。そこで、 Perl で Excel データを生成する方法と日本語を扱うときの注意点をまとめてみました。
環境構築編/必要な Perl モジュールをインストールします。
下記コマンドを root 権限のあるユーザで実行してください。
日本語を含む Excel データの生成例
ポイントは、Unicode::String モジュールと Jcode モジュールで日本語を UTF-16BE に変換する必要があるという点です。面倒ですが、これだけで Excel データを生成できると考えればお手軽ぢゃぁありませんか。より詳しい情報はこちらから 。
環境構築編/必要な Perl モジュールをインストールします。
下記コマンドを root 権限のあるユーザで実行してください。
- perl -MCPAN -e 'install Spreadsheet::WriteExcel'
- perl -MCPAN -e 'install Spreadsheet::ParseExcel'
- perl -MCPAN -e 'install Unicode::String'
日本語を含む Excel データの生成例
#!/usr/bin/perl -w use strict; use Jcode; use Unicode::String qw(utf8 utf16); use Spreadsheet::WriteExcel; # Create a new workbook called simple.xls and add a worksheet my $workbook = Spreadsheet::WriteExcel->new("simple.xls"); my $uni_font = $workbook->add_format(font => 'Arial Unicode MS'); my $worksheet = $workbook->add_worksheet(utf8( Jcode->new('シート1')->utf8 )->utf16,1); # Write some text $worksheet->write_unicode(0, 0, utf8( Jcode->new('こんにちわ Excel!')->utf8 )->utf16); # Write some numbers $worksheet->write(2, 0, 3); # Writes 3 $worksheet->write(3, 0, 3.00000); # Writes 3 $worksheet->write(4, 0, 3.00001); # Writes 3.00001 $worksheet->write(5, 0, 3.14159); # TeX revision no.? # Write some formulas $worksheet->write(7, 0, '=A3 + A6'); $worksheet->write(8, 0, '=IF(A5>3,"Yes", "No")'); # Write a hyperlink $worksheet->write(10, 0, 'http://www.perl.com/');
ポイントは、Unicode::String モジュールと Jcode モジュールで日本語を UTF-16BE に変換する必要があるという点です。面倒ですが、これだけで Excel データを生成できると考えればお手軽ぢゃぁありませんか。
- スポンサーリンク -
コメントやシェアをお願いします!
drk
pmakino さん>
ご報告有り難うございました。2.10 は便利ですねぇ〜
※TB はスパムばっかりなので停止しちゃいました。すいません。。。
pmakino
2.10 以降は utf8 な日本語がそのまま通るようになっているようです。
トラックバックができなかったので詳しくはこちらをどうぞ↓
http://pmakino.jp/tdiary/20070828.html#p01
Masaki
こんばんわ
Masakiです。
おぉ、それは知りませんでした。業務で使ってるモジュールのバージョンアップ
しようかと思ってたんですけど。断念します。
Excelを出力出来ると言うのは確かに価値があると思います。
動的にWebベースで集計を出力出来たりしますしね
drk
Masakiさま>WriteExcelの古いバージョンはSJISが行けたのですが、最近の新しいバージョンはUTF-16BEしか通らない(文字化けする)仕様に変更されてますね。
まぁいろいろとメンドウなのですが、Excelデータが出力できるという点に価値があったりすると思いました。
Masaki
こんばんわ
Masakiといいます。
WriteExcelは仕事で何回か使ったことがあるけど、便利と言えば便利ですけど
凝った物を作るには、なれるまではかなり面倒でした。
ParseExcelと組み合わせてテンプレートを読み込んでそこにデータを突っ込ん
だりも出来ますよ。(って知ってますかね?)
文字コードはUTF-16BEじゃなくてSJIS(CP932)でも行けましたよ。
でも、perl5.8とかになるとUTF-16BEじゃないとダメなんですか?