• 2001/10/08 [Java,JCom]Javaを使ってExcelのグラフを画像ファイルに落とす。(2001-10-21加筆)
    よく、Webアプリで画像をどうやって作るのだろう?というのが問題になりますよね? 自前で作るのはしんどいし、リッチな画像を作るのには苦労するし。 Excelのグラフみたいな画像が簡単にできたらいいのになぁ〜、と思っている人は 結構多いのではないでしょうか?

    ではExcelのグラフから画像をファイルに落とすプログラムを作ってみましょう。 JavaからExcelを扱うには、 JCom(Java-COMブリッジ) を使います。 WebサーバがNTならサーブレット上からもJComを使うことはできます。 サーブレットの中でExcelを起動し、グラフを作り、そのイメージを ファイルに落とすことは可能です。

    これはVersion2.23以降でないと動かないので、それ以前のバージョンを持っている人は 最新版をダウンロードしてください。 クリップボードにコピーする際にCopyメソッドを使いますが、それはVersion2.23から 対応しています。

    あらかじめグラフが描画されているものとします。 まず、グラフを貼りつけているセルを選択し、それをクリップボードにコピーします。
    	// 円グラフをクリップボードにコピーする。円グラフの位置はE15:L28の間。
    	xlSheet.Range("E15:L28").Copy(null);
    
    次にクリップボードに張り付けてあるデータを取得します。
    	Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
    	Transferable tr = cb.getContents(null);
    	if(tr==null) return false;	// クリップボードが空
    
    クリップボードにはいろんな形式でかかれています。このうち、Imageが扱える形式を 探します。
    	// クリップボードで扱える形式のうち、Imageが扱えるものを探す。
    	DataFlavor[] flavors = tr.getTransferDataFlavors();
    	DataFlavor imageflavor = null;
    	for(int i=0; i<flavors.length; i++) {
    		if(flavors[i].getRepresentationClass().equals(Image.class)) {
    			imageflavor = flavors[i];
    			break;
    		}
    	}
    	if(imageflavor == null) return false;	// Imageでは扱えない。
    
    Imageを取得します。
    	Image image = (Image)tr.getTransferData(imageflavor);
    
    あとは、これをファイルに落とすのですが・・・、
    あれっ、どうだっけ???

    誰か教えて。(^_^;

    (2001-10-21加筆)
    JPEGとGIFの読み込みならアプレットでできるのですが、それ以外は標準ではサポートされていないようです。 何らかのライブラリを別途用意する必要がありそうです。
    そういえば、昔、ネットの友人から教えてもらっていました。 画像ファイル関係を扱うライブラリとして、 JIMI(Java Image Management Interface) があるので、それをインストールすればOKです。 使い方は極めて簡単。
    	Jimi.putImage(img, file_name);
    拡張子をみて、判断してくれるのでとても楽です。 対応しているフォーマットは、 GIF(no compressed encoding) JPEG, TIFF, PNG, PICT, Photoshop, BMP, Targa, ICO, CUR, Sunraster, XBM, XPM, PCX, DCX. など、メジャーなフォーマットはほとんど対応しています。 GIFが無圧縮しか対応していないのはライセンスによるためでしょう。

    以下は完成したプログラムです。FileSize.lzh(5,587 バイト)
    FileSize.xls FileSize.java readme.txt
    戻る