JCom  know how   LastUpdate:

戻る
001   JCom って何?
002   JCom のインストール方法
003   とにかく動かしてみよう
004   WEBでの印刷に適応するにはどうしたらいい?

001   JCom って何?

JComとはJavaからWindowsのCOMを利用することのできる Java-COMブリッジです。ExcelやWordなど、既存のCOMの機能をJavaから利用することができます。

製品概要 http://www.hcn.zaq.ne.jp/no-ji/jcom/index.htm

2001/11/27


002   JCom のインストール方法

  1. JComXX.zipを解凍する。
  2. jcom.jar を、(java-home)/lib/ext/ へコピー。
    で、java-home はどこか?
    以下のソースをコンパイル/実行して必ず確認しましょう。(私はハマリました)。

    public class ShowPath {
     public static void main(String[] args) throws Exception {
      System.out.println("java.home="+System.getProperty("java.home"));
      System.out.println("この下の bin に jcom.dll を、");
      System.out.println("この下の lib/ext に jcom.jar をコピーしましょう。");
     }
    }

2001/11/27


003   とにかく動かしてみよう

フォルダの中にサンプルがありそうなので、それを元に簡単なサンプルを作ってみる。

  1. \demo\samples のtestExcel.javaを任意のフォルダに複写
  2. コンパイル javac testExcel.java
    コンパイルエラーが出たら、jcom.jarが正しい位置にありません。
  3. では、実行 java testExcel
  4. うまく動いたでしょうか? もちろん、エクセルがインストールされているマシンでないと動きませんよ。

これでスタンドアロンベースでのEXCELの基本的な連係は確認できました。ネ。


004   WEBでの印刷に適応するにはどうしたらいい?

いろいろサンプルがあったので、そこからエッセンスだけを取り出して、シンプルサンプルを作ってみたいと思う。

イメージ
フォームから値を入れて、それをExcelに表示する。

値入力用フォーム
C:\Program Files\Allaire\JRun\servers\default\jcomtest1\jcomexcel2.html


<html lang="ja">
<head>
  <title>No Tiltle.</title>
</head>
<body>
<form method="POST" action="http://10.72.24.41:8100/jcomtest1/servlet/JComExcel2">
  <input type="text" name="T1" size="20">
  <input type="text" name="T2" size="20"><br>
  <input type="text" name="T3" size="20">
  <input type="text" name="T4" size="20"><br>
  <input type="submit" value="送信" name="B1">
  <input type="reset" value="リセット" name="B2"></p>
</form>
</body>
</html>

Servletソース
C:\Program Files\Allaire\JRun\servers\default\jcomtest1\WEB-INF\classes\JComExcel2.java


import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*;
import jp.ne.so_net.ga2.no_ji.jcom.excel8.*;
import jp.ne.so_net.ga2.no_ji.jcom.*;

public class JComExcel2 extends HttpServlet {

// POSTに変更
public void doPost(	HttpServletRequest req, 
   					HttpServletResponse res) throws IOException, ServletException { 
   


	// まず、エクセルを準備する-------------------------------------------------
	ReleaseManager rm = new ReleaseManager();

    try{

		// 各エクセルオブジェクト変数を宣言
        ExcelApplication excel = new ExcelApplication(rm);
        //	excel.Visible(true); サーバーでエクセルが見えたら困るので、見えるようにする必要な無い

		ExcelWorkbooks 	xlBooks	= excel.Workbooks();
        ExcelWorkbook 	xlBook 	= xlBooks.Open("C:\\Inetpub\\wwwroot\\test\\MHATEST2.xls");
        ExcelWorksheet 	xlSheet	= excel.ActiveSheet();
        ExcelRange 		xlRange = xlSheet.Cells();

		// リクエストの値から、セルに値をセット
        xlRange.Item(1, 2).Value(req.getParameter("T1"));
        xlRange.Item(1, 3).Value(req.getParameter("T2"));
        xlRange.Item(2, 2).Value(req.getParameter("T3"));
        xlRange.Item(2, 3).Value(req.getParameter("T4"));

		//保存する
		xlBook.Save();
		xlBook.Close(false,null,false);

		//エクセルオブジェクトの破棄
		excel.Quit();



	}catch(Exception e){
		System.out.println("例外発生");
	}finally{
		rm.release();
	}



	// セーブしたエクセルをクライアント側に直接表示させる----------------------------------


	// Specify content type.
	res.setContentType("text/html");

	// Access the output stream.
	PrintWriter out = res.getWriter();

	// Return HTML. 
	out.println("<html>");
	out.println("<head><title>JComExcel2</title></head>");

	out.println("<script language='javascript'>");
	out.println("function ExcelLoad(){");
	out.println("subwin = window.open('http://10.72.24.41/test/MHATEST2.xls');");	// 別windowで開くようにしてみた
	out.println("}");
	out.println("</script>");

	out.println("<body onload = 'ExcelLoad()'");
	out.println("<h1>JComExcel2.java</h1>");
	out.println("<p>This text came from a servlet.</p>");

	out.println("<p>C:\\Program Files\\Allaire\\JRun\\servers\\default\\jcomtest1\\WEB-INF\\classes\\JComExcel2.class.</p>");

	out.println("</body></html>");

   } 
}

実行方法   http://cnes-as1-l1041:8100/jcomtest1/JComExcel2.html

Servletの処理概略手順では、

  1. JComの機能を利用してExcelオブジェクトを生成し、ひな形であるExcelファイルをOpen
  2. リクエストパラメータの内容をセルに貼り付け
  3. Excelファイルの上書き保存
  4. Excelオブジェクトの破棄
  5. htmlファイルが開いた時に、Excelファイルを別窓で開くようなhtmlファイルを生成し、レスポンスで返す

といった感じで出来ました。

実験してみて判った問題点

  1. クライアント側からExcelファイルを開くときのURLは、JRUN配下だとxlsファイルをバイナリのまま開き文字化けしてしまったので、IIS支配下に置く必要があった。
  2. 上書きセーブするので、複数クライアントから同時請求が有ったとき値に保証性が無い。
  3. 自動印刷の為のマクロをBookのOpenイベントで実装したら、サーバー側でも開いた時にマクロが走ってしまった。クライアント側で開いた時だけマクロが動くような仕掛け(フラグめいたもの)が必要と思われれる。

2001/11/27


戻る