株式会社 システムアイ http://www.systemi.co.jp

 

JavaExcel

ポイント:Excelマクロで記録したソースを簡単にJavaへ移行したい

ラーニングカーブが確実にフラットであり、生産性が高い

 

JavaExcel形式の帳票を出力する方法

方法

リンク

メリット/デメリット

POI

http://poi.apache.org/

純粋Java

Excelアプリ自体は不要

マクロ、イベントをサポートしない

JCom

http://sourceforge.net/projects/jcom

Javaと任意COMのブリッジ

イベントをサポートしない

JACOB

http://danadler.com/jacob/

Javaと任意COMのブリッジ、イベントをサポート

APIで手続き型コーディング

 

JCom自体はJACOBのように、APIで手続き型コーディングすることができる。COMAPIを調べて、COMのJavaオブジェクトの作成方法も提示してあるが、Visual C++ 2008Express Editionでうまく動かない。Javaラッパークラスもダウンロードできない。

本文はCOMのJavaオブジェクトを作成する方法を説明する。生成したJavaオブジェクトを使えば、ExcelマクロをJavaへ移行するハードルがかなり低くなる。

 

ダウンロード(6.2MB

 

VC++プロジェクト

1.開発環境のインストール

(ア)  Windows Platform SDK のインストール

Win32DLLを作成するには、Visual C++ 2008Express Editionの前に、Windows Platform SDK を先にインストールした方が楽である

(イ)  Visual C++ 2008Express Editionのインストール

2.修正箇所のまとめ

callCom.cppから抜粋

HRESULT createInstance(const char* progid, IDispatch** ppIDispatch)

{

        USES_CONVERSION;

        //2008/06/04 追加開始

        //ワイド文字列へ変更するために追加

        int len;

        wchar_t wcs[32];

        //2008/06/04 追加終了

 

        HRESULT hr = CoInitialize(NULL);

        if(FAILED(hr)) return hr;

        CLSID clsid;

        //2008/06/04 削除開始

        //hr = CLSIDFromProgID(T2OLE((LPTSTR)progid), &clsid);

        //2008/06/04 削除終了

 

        //2008/06/04 追加開始

        //ワイド文字列へ変更する

        len = mbstowcs(NULL, progid, 0);

        //「戻り値= sz」になる場合、ワイド文字列の終わりにNULL文字は付きません。

        //NULL文字を付けたい場合は、sz に変換後の文字数を超える値を指定します。

        len = mbstowcs(wcs, progid, len + 1);

        hr = CLSIDFromProgID(wcs, &clsid);

        //2008/06/04 追加終了

 

        if(FAILED(hr)) {

                OutputMessage();

                return hr;

        }

 

        *ppIDispatch = NULL;    // 念のため

        hr = CoCreateInstance(clsid, NULL, CLSCTX_SERVER,

                                                IID_IDispatch, (void**)ppIDispatch);

        return hr;

}

 

Javaプロジェクト

1.開発環境のインストール

Eclipseをインストール

2.修正箇所のまとめ

タイプVT_PTR+VT_SAFEARRAY+VT_VARIANTとタイプVT_SAFEARRAY+VT_VARIANTのコンパイルエラー対応の追加(動作確認未)

ApplicationProgIDから生成するのコンストラクターの追加

 

jcom.dll%java_home%/jre/binへコピーし、jcom.jar%java_home%/jre/lib/extへコピーして、利用できる。

 

同じ方法で、Wordなどのラッパークラスを作成できる。

 

株式会社 システムアイ http://www.systemi.co.jp