システム開発の仕事をしているとお客さんからよくExcelで出力できないか?ということを聞かれます。
しかし、これが結構難問なのですね。ExcelはもともとMicrosoftによってクローズな規格で作られてきたものですから
外部との連携という点で非常に弱い。Excelファイルをサーバ側で動的生成してダウンロードさせるということがとても難しい。
また、ローカルのExcelファイルとサーバの間で通信するような仕掛けを作るのが難しい。
そんな開発者の愚痴のような話ですが、どうも最近では事情が変わってきているようです。
バイナリのxlsファイルは入出力が困難
2003年ぐらいにExcel出力をする案件を受けた際にはJavaからExcelを出力する信頼性の高い方法論が見つかりませんでした。
JavaでExcel出力というとApache POIが有名ですが
他のApacheのプロダクトに比べ、品質が低い。ライブラリ自体も洗練されておらず、非常に扱いにくいものです。
最近バージョン3.0が発表されました。私は3.0については未評価ですが、
2.5.1では画像が使えない、グラフが使えないといった制約がありました。
当時は.NETに迂回してExcel出力するというトリッキーな手法で対応したのですが、.NET側からですら
Excel出力をするまともなMicrosoft提供のプロダクトがなかったように記憶しています。
結局、ExcelCreatorという
サードパーティのツールで出力させていたのですが、よく考えればおかしな話です。
このほかに、たしかサーバ上でExcelを起動してファイルを作成するような方法論があったと記憶しています。
しかし、多重起動などで問題を抱えていたような…。このあたり自分で導入したわけではないので
名称などもよくわからないのですが、当時を知る方がいらっしゃいましたら情報をいただけると助かります。
OpenOffice.orgならフォーマットがオープン
私は特別な事情がない限りはOpenOffice.orgを愛用しているのですが、
その理由はファイルフォーマットがオープンな規格(OpenDocumentFormat)を採用していることもあり、
Excel出力に比べ、格段に安定した表計算ソフトでの出力が可能である点です。
また、マクロが強力で、VBAにくらべ制約が少ないのも魅力的です。
VBAでSOAP通信をする場合、SOAP Toolkitを使うのですが、
日付型などでのnull値の扱いが胡散臭かったり、何かと苦労させられました。
対応型も少なく、サーバ側でSOAP Toolkitで使える型に合わせてインターフェースを決めるなど、
随分と苦労させられました。
こういった点からもExcelは単体の表計算ソフトとして利用するのであればともかく、
システムの土台としてのプラットフォームとしては厳しい評価をせざるを得ないと考えていました。
企業への導入率は非常に高いため、「OpenOffice.orgだったら可能なんですけどねぇ」という話は
冗談としてしか受け取ってもらえなかったりと悲しい思いをしたこと幾星霜。
Excel 2003 以降ならデータだけならXMLで出力できる
Excel 2003以降であれば、
XML形式でのファイルフォーマットがサポートされたため比較的簡単にそして
信頼性の高い方法でExcel出力が可能となりました。
XMLでの出力で済むため、JSPで記述することでExcel出力が可能です。
しかし、セルのスパンなどをした場合、Indexを綺麗にあわせないとフォーマットの
エラーとなり開けないなど、デリケートな部分があり、がりがりと生のXMLを書き出すには
それなりの慣れが必要です。
また、このXMLフォーマットでは画像を張れない、矢印などの図形オブジェクトが置けない、
グラフが使えない、マクロが使えないといった制約があるため、
出力する内容によっては採用できません。
Excel 2007 であればOpenXML形式で出力できる
2003でのXML出力はデータの出力に限定すれば便利でしたが、図表などが用いれないため
非常に用途の限られるものでした。
Excel 2007 以降ではMicrosoft Office Open XMLというEcma標準規格を採用
(というより規格を作ってEcmaに認証を通した)。
これにより、オープンな規格でのファイルフォーマットとなったため、
信頼性の高いExcel出力処理が可能となったのです。
OpenOffice.orgと比べると、「やっと」という感じですね。
それにしても、すでに存在するISO(国際標準化機構)標準であるOpenDocumentを使わずに独自のフォーマットを制定して
Ecma(欧州電子計算機工業会)標準化するあたり、なんともMicrosoftらしいですね。
この形式での拡張子はxlsxとなりますが、
互換パックを導入
することでExcel 2003などでも読み書きできるようになります。
Excelに固辞する企業相手には、2007への完全移行までの間、パッチを入れることを飲んでもらえるようなら、
OpenXML形式でのExcel出力が一番無難なソリューションに思えます。
投稿日時 : 2007年10月12日 14:42