Apdesigner プログラマーズガイド
目次 索引 前ページ次ページ

第3部 Apdesigner利用編> 第11章 Javaアプリケーション処理手続きを記述する

11.8 OLEサーバを操作する

Javaで記述したイベント処理から、OLEオートメーションサーバ(以降、OLEサーバと略します)を操作することができます。これを「OLEオートメーション機能」と呼びます。

ここでは、OLEオートメーションの処理記述について示します。

+OLEサーバの生成・取得するクラ

OLEサーバを生成または取得するためには、CDOleSysクラスの以下のサービスメソッドとCDVariantクラスを使います。

生成したOLEサーバのオートメーションは、CDVariantクラスとして復帰します。プロパティの参照または設定を行うために、getPropertyまたはsetPropertyメソッド、メソッド呼出しを行うためにinvokeメソッドを使用します。
なお、各クラスの詳細については、"Apworksリファレンス Javaサービスクラス編"を参照してください。

++CDVariantクラスを使用し、CDVariantクラスが配列を意味する場合

CDVariantクラスを使用し、CDVariantクラスが配列を意味する場合、parrayフィールドをキャストする必要があります。以下に例を示します。

例1

   ・ ・ ・
CDVariant var1;

// OLEサーバ(server)から"Property1"という名前のプロパティを参照します。
// このプロパティはbyteの一次元配列が返却されることを仮定しています。
var1 = server.getProperty("Property1");

// 返却されたCDVariantのbyte1次元の配列を参照します。
byte[] a = (byte[])var1.parray;
   ・ ・ ・

例2

   ・ ・ ・
CDVariant var2;

// OLEサーバ(server)から"Property2"という名前のプロパティを参照します。
// このプロパティはintの二次元配列が返却されることを仮定しています。
var2 = server.getProperty("Property2");

// 返却されたCDVariantのint2次元の配列を参照します。
int[][] b = (int[][])var.parray;
   ・ ・ ・

++OLEオートメーションの解放

OLEオートメーションの解放のタイミングは、以下のどちらかで行われます。

ガーベージコレクトおよびファイナライザ実行のタイミングは不定期です。そのため、OLEオートメーションで使用したリ、ソースを解放したりするには、clearメソッドを利用してOLEオートメーションを明示的に解放するようにします。


CDVariantクラスのclearメソッドを実行し、OLEオートメーションを解放する例を、以下に示します。

public static void main(String[] arg) {
   CDVariant Excel = CDOleSys.createOLEAutoObject("Excel.Sheet");
            .
            .
            .
   Excel.clear(true);  // ExcelのOLEオートメーションを解放します。
}

+記述例

Java記述によるOLEオートメーションの例を、以下に示します。


アテンション(UPDATEEXCEL)が発生したときに、Excelを起動し、セルの値を書き換え、ファイルに保存して終了するという処理を記述しています。

[Javaフォームのイベントでの記述例]

public boolean processAttention_UPDATEEXCEL()
{
   CDVariant  excel;
   CDVariant  workbooks;
   CDVariant  workbook;
   CDVariant  worksheet;
   CDVariant  cell;

   try{
        // Excelを起動します。
        excel = CDOleSys.createOLEAutoObject("Excel.Application");

        // Excelを可視状態にします。
        excel.setProperty("Visible", 1);

        // ファイルc:\goods.xlsを開きます。
        workbooks = excel.getProperty("Workbooks");
        workbook  = workbooks.invoke("Open", "c:\\goods.xls");

        // セル(1,1)に"ABCDEFG"を設定します。
        worksheet = workbook.getProperty("Worksheets", "sheet1");
        cell = worksheet.getProperty("Cells", 1,1);
        cell.setProperty("Value", "ABCDEFG");

        // ファイルを保存します。
        workbook.invoke("Close",1);
        // Excelを終了します。
        excel.invoke("Quit");
   }catch(Exception e){
     System.out.println(e.toString());
   }

   // OLEオートメーションを解放します。
   cell.clear(true);
   worksheet.clear(true);
   workbook.clear(true);
   workbooks.clear(true);
   excel.clear(true);

   return true;
}

目次 索引 前ページ次ページ

All Rights Reserved, Copyright (C) 富士通株式会社 1998-2006