民芸的プログラミング 〜ソフトウェア開発日記〜

アクセスカウンタ

zoom RSS CSV のファイルを Excel 形式に変換する方法

<<   作成日時 : 2008/08/17 00:45   >>

ブログ気持玉 0 / トラックバック 1 / コメント 0

これまで数日に渡って CSV 形式のファイルを綺麗に Excel に取り込む方法について、検討を加えてきた。先日 AC さん(←スラッシュドットの読者さん?)の残してくれたコメントのおかげで、Excel 2002 以降は比較的楽に CSV ファイルを取り込めるということが分かったのが、最近では一番インパクトがあった。が、私個人としては、それに匹敵する衝撃的なやり方が、今日また見つかった。

まず、パソコンに、Perl(Windowsなら、ActivePerl)をインストールし、さらに Spreadsheet::WriteExcel モジュールをインストールしておく。日本語を扱いたい場合は iconv.exe も必要だ。
そして、csv2xls.pl というファイル名で以下のファイルを作る。

---- ここから ----
#!/usr/bin/perl

use Spreadsheet::WriteExcel;

binmode(STDIN, "utf8");
binmode(STDOUT);
my $workbook = Spreadsheet::WriteExcel->new(\*STDOUT);
my $sheet = $workbook->addworksheet("sheet1");
my $row = 0;

while (<>) {
  s/\x0D?\x0A?$//;
  my $col = 0;
  foreach (split(/,/)) {
    if (/^[+-]?[1-9][0-9.]*/) {
      $sheet->write_number($row, $col, $_);
    } else {
      $sheet->write_string($row, $col, $_);
    }
    ++$col;
  }
  ++$row;
}
---- ここまで ----

そして、コマンドプロンプトから、
type hogehoge.csv | iconv -f cp932 -t utf8 | perl ./csv2xls.pl > hogehoge.xls
とやれば、hogehoge.csv を Excel 形式のファイル、hogehoge.xls に変換することができる。

私の日常業務だと、お客さまのところに CSV でデータを送ることが多いのだが、お客さんによっては CSV だとうまく Excel に取り込めなくて難儀することがある。Excel 2002 以降を使ってくれと言うわけにもいかないので、どうにか CSV を簡単に Excel 形式に変換できないかと思い検討を加えてきたわけだが、今回のやり方だと、まったく人手を介さずに機械処理だけで Excel ファイルを生成できるので、まあ、一つの到達点と言う事ができる。
CSV をこちら側で Excel に変換してからお客さまのところに届けるサービスの目処が立ったのだ。

で、何が衝撃だったかというと、CSV を機械的に Excel 形式に変換するには、Jakarta POI を使うのが一番の近道で、そのためには Groovy なり Rhino なりを使わなければいけないと、私はこれまで頑なに信じていたのだ。それが今日、ふと Google で調べ物をしていたら、Perl でも Excel 形式のデータを生成できることが分かってしまった。
しかも POI を使うよりもはるかにラク。
Groovy あるいは Rhino を覚えるきっかけが一つ失われたのは残念だが、課題が一つ解決したのだから結果オーライだと思っていいのだろう。

しかし、Rhino(サイ)を調べていて Hippo2000(カバ)さんのホームページ http://homepage3.nifty.com/hippo2000/perltips/Spreadsheet/WriteExcel.htm にたどり着く結果になるとは。
上野動物園でも、サイとカバは隣同士(参照 http://www.tokyo-zoo.net/zoo/ueno/ )だから、まあ、よしとするか。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(1件)

タイトル (本文) ブログ名/日時
まだまだ CSV のファイルを Excel 形式に変換する方法
一年ほど前に、 http://kzworks.at.webry.info/200808/article_33.html このあたりでほぼアイデアは出尽くしていたと思っていたのだが、今日、また新しいやり方を考え付いた。 ...続きを見る
民芸的プログラミング 〜ソフトウェア開発...
2009/06/07 22:23

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
CSV のファイルを Excel 形式に変換する方法 民芸的プログラミング 〜ソフトウェア開発日記〜/BIGLOBEウェブリブログ
文字サイズ:       閉じる