先に断っておきますが、拡張子xlsxであるOffice Open XML Spreadsheetです。いわゆるExcel 97-2003形式(拡張子xls)を期待された方、すみません。

ウェブブラウザ上で動作するJavaScriptでExcelブックを作るプログラムを書いてみました。

Google Chrome 10.0, Safari 5.0.4, Firefox 4.0, Firefox 3.6.16で正常に動作しました。ただし、SafariとFirefoxでは、ダウンロードのたびにファイル名を指定する設定とすることをお薦めします。そうでない場合、ファイルに拡張子が付かないです(Excelの入っていないPCではGoogle Chromeも同じ結果になるのかもしれません)。

Opera 11.01では、期待通りのファイルが生成されず、Excelで開こうとすると「修復しますか?」と聞かれてしまいます(一応「はい」を選ぶと開けます)。Internet Explorer 8と9では動作しませんでした。

IEで動かない理由はData URIからのファイルがダウンロードできないためです。Operaでだめな理由は、XMLSerializerの動きがほかと違うためのようです。

なお、OpenOffice.orgでは開けなかったという報告を受けております。Excelが出力するデータと比べ、かなり省略しているためと思います。


ご存じの方も多いでしょうが、Office Open XMLはXMLファイルをZIPで固めた形式です。そのため、話の上では最低限XML操作のライブラリとZIPを作るライブラリがあれば作れることになります。はじめは、WSH上でやろうとしたのですが、「Data URIがあればウェブブラウザ上で実現できる!」と考えました。

なお、以下のライブラリを使用しました。

JSZip
JavaScriptでZIPを生成するライブラリです。ただし、JavaScriptでZIPを作ってData URIでダウンロードができること、すなわち「これはいける」という確信を与えてくれたのは「JavaScript 内で無圧縮 ZIP を作って Data URI を生成するライブラリを作りました – IT戦記」でした。あわせて感謝です。
linq.js
コレクション操作系ライブラリです。.NET FrameworkのLINQ to Objectの移植です。個人的には、JavaScriptではこれがないと何も書く気が起きません。

スポンサード リンク

この記事のカテゴリ

  • ⇒ JavaScriptでExcelファイルを作る