JCom(Java-COMブリッジ)
サンプル1:基本的な使い方
(jcom)/demo/samples/testExcel.java
import jp.ne.so_net.ga2.no_ji.jcom.excel8.*;
import jp.ne.so_net.ga2.no_ji.jcom.*;
import java.io.File;
import java.util.Date;
/* Excel用ラッパを使った、JComのサンプルプログラム */
class testExcel {
public static void main(String[] args) throws Exception {
ReleaseManager rm = new ReleaseManager();
try {
System.out.println("EXCELを起動中...");
// すでに立ち上がっていると、新しいウィンドウで開く。
ExcelApplication excel = new ExcelApplication(rm);
excel.Visible(true);
// 色んな情報を表示
System.out.println("Version="+excel.Version());
System.out.println("UserName="+excel.UserName());
System.out.println("Caption="+excel.Caption());
System.out.println("Value="+excel.Value());
ExcelWorkbooks xlBooks = excel.Workbooks();
ExcelWorkbook xlBook = xlBooks.Add(); // 新しいブックを作成
// すべてのファイルを列挙してみる
System.out.println("現在のディレクトリのファイルをセルに設定");
ExcelWorksheets xlSheets = xlBook.Worksheets();
ExcelWorksheet xlSheet = xlSheets.Item(1);
ExcelRange xlRange = xlSheet.Cells();
xlRange.Item(1,1).Value("ファイル名" );
xlRange.Item(2,1).Value("サイズ" );
xlRange.Item(3,1).Value("最終更新日時");
xlRange.Item(4,1).Value("ディレクトリ");
xlRange.Item(5,1).Value("ファイル");
xlRange.Item(6,1).Value("読み込み可");
xlRange.Item(7,1).Value("書き込み可");
File path = new File("./");
String[] filenames = path.list();
for(int i=0; i<filenames.length; i++) {
File file = new File(filenames[i]);
System.out.println(file);
xlRange.Item(1,i+2).Value( file.getName() ); // ファイル名パス無し
xlRange.Item(2,i+2).Value( (int)file.length() ); // ファイルサイズ
xlRange.Item(3,i+2).Value( new Date(file.lastModified()) ); // 最終更新日時
xlRange.Item(4,i+2).Value( file.isDirectory()?"Yes":"No" ); // ディレクトリか?
xlRange.Item(5,i+2).Value( file.isFile()?"Yes":"No" ); // ファイルか?
xlRange.Item(6,i+2).Value( file.canRead()?"Yes":"No" ); // 読み取り可か?
xlRange.Item(7,i+2).Value( file.canWrite()?"Yes":"No" ); // 書き込み可か?
}
String expression = "=Sum(B2:B"+(filenames.length+1)+")";
System.out.println("数式を埋め込み、ファイルサイズの合計を求める "+expression);
xlRange.Item(1,filenames.length+2).Value("合計");
xlRange.Item(2,filenames.length+2).Formula(expression);
xlRange.Columns().AutoFit(); // 横幅をフィットさせる
// プリンタに出力する場合はコメントをはずしてください。
// デフォルトのプリンタに出力されます。
// System.out.println("プリンタに印刷します。");
// xlSheet.PrintOut();
// ファイルに保存する場合はコメントを外してください。
// ディレクトリを指定しない場合は、(My Documents)に保存されます。
// System.out.println("ファイルに保存します。(My Documents)\\testExcel.xls");
// xlBook.SaveAs("testExcel.xls");
xlBook.Close(false,null,false);
excel.Quit();
System.out.println("ご静聴、ありがとうございました。");
}
catch(Exception e) { e.printStackTrace(); }
finally { rm.release(); }
}
}
サンプル2:Excelを使って見積書を作成
(jcom)/demo/estimate/
ある見積書を自動的に作るシステムがあると仮定します。
システム自体はJavaで組んでいますが、見積書の部分だけは
Excelで作る必要があるとします。Excelの方が品質の高い
シートが作れますし、今回はExcelの印刷機能も利用します。
まず、estimate.xlsを見てください。
これは見積書の原紙にあたります。
必要な数式も埋め込まれていますし、印刷範囲も設定済みです。
このファイルをいったん別の名前でコピーし、それに対して必要な
箇所に値を入れていきます。
そして印刷し、保存して終了します。
コピーされたファイルは、すべて残しておくものとします。
したがってファイル名はユニークな値にします。
これは、見積書Noと一致させる方がよいでしょう。
それらは見積有効期間が過ぎるまで保持します。
ただし、このサンプルではそこまで実装していません。
サンプルでは実際には印刷しませんが、以下の行をコメントから外せば印刷を行います。
// est.print_enable = true;
実際の運用となると、プリンタの代わりにFAXやメールに送ることも
考えられますね。
このサンプルはJCom Ver2.01以降のファイルに含まれています。
Excel97,2000で動作します。
サンプル3:ExcelファイルからXMLを作成
(jcom)/demo/outxml/
サンプル2で作成されたいくつかの見積書から、必要なデータを
抽出してXMLに出力します。
まず、カレントディレクトリにあるExcelファイルを開き、
想定事例とは逆の方法で、該当セルからデータを取得します。
あとは、PrintWriterを使ってXMLファイルを作ります。
このサンプルではXMLの出力のみなので、XMLパーサは必要
ありません。 しかし、XMLパーサがあれば、XML→EXCELの
処理も可能でしょう。
●実行方法
あらかじめ、JComが正しくインストールしているものとします。
javac OutXML.java //コンパイル方法
java OutXML // 実行方法
サンプル4:VBで作成したCOMを利用する。
(jcom)/demo/vbcom/
戻る