2011-01-15 11 views
0

私は優れています。他のリソースからデータを読み込むためにExcelファイルにマクロを作成します。毎秒マクロが実行され、そのExcelセルが更新されます。JavaからマクロでExcelを読む

今、毎秒Excelのデータを読み込むためのJavaプログラムを作成したいと思います。私はApache POIを試してみましたが、documentationを確認した後、tiは読み込みをサポートしていません。

私はいくつかのリソースから読んでいます。Java Com Bridge(JCOB)は、マクロを使って読むことができます。私は試しましたが、セルの値はまだ私のコードを試して毎回更新されていません。

import com.jacob.com.*; 
import com.jacob.activeX.*; 

public class ExcelTest { 
private static ActiveXComponent xl; 
private static Dispatch workbooks = null; 
private static Dispatch workbook = null; 
private static Dispatch sheet = null; 
private static String filename = null; 
private static boolean readonly = false; 

public static void main(String[] args) { 
    String file = "D:\\tutorial\\ApachePoi\\ratesource.xls"; 
    OpenExcel(file, false); // do not show false to open Excel 
    System.out.println(GetValue("B46")); 
} 

private static void OpenExcel(String file, boolean f) { 
    try { 
    filename = file; 
    xl = new ActiveXComponent("Excel.Application"); 
    xl.setProperty("Visible", new Variant(f)); 
    workbooks = xl.getProperty("Workbooks").toDispatch(); 
    workbook = Dispatch.invoke(
    workbooks, 
    "Open", 
    Dispatch.Method, 
    new Object[] { filename, new Variant(false), 
     new Variant(readonly) },// whether to open read-only 
    new int[1]).toDispatch(); 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 

} 

// Read value 
private static String GetValue(String position) { 
    if (workbook == null) { 
    System.out.println("workbook is null"); 
    } 
    sheet = Dispatch.get(workbook, "ActiveSheet").toDispatch(); 
    Object cell = Dispatch.invoke(sheet, "Range", Dispatch.Get, 
    new Object[]{position}, new int[1]).toDispatch(); 
    String value = Dispatch.get((Dispatch) cell, "Value").toString(); 

    return value; 
} 
//1.3638356164383563 
//1.3638356164383563 




private static void SetValue (String position, String type, String value) 
{ 

} 



} 

答えて

1

私はあなたのことを行うことができるExcelエンジンについてよく知らないです。

スプレッドシートを実行しているときに、代わりにExcelと会話して値を尋ねたことはありますか?私はあなたがODBCでそうすることができると信じています。

もう1つのアプローチは、あなたのシートのOpenOfficeバージョンを作成して、代わりにOpenOfficeと対話することです。

+0

現在のシステムがExcelを使用して他のリソースからデータを読み込みます。私の仕事は、インターネット上のいくつかのウェブサイトにデータを公開するプログラムを作成することです。 シートには2つのテーブルがありますが、ODBCを使用すると効果的ではないと思います。 –

+0

Excelで作業が必要な場合は、Excelデータファイルを解析せずにExcelと会話する必要があります。 –

+0

Excelと話すのはどういう意味ですか?申し訳ありませんが、私の英語は十分ではありません。 –

0

一つの落とし穴は、POIは、別のファイルに書き込む既存のエクセルの値を変更しないとあなたは違い

workbook.getSheet().getRow(1).getCell(0).setValue("test"); 

を見ることができますし、別のファイル

public void writeFile(String fileName) { 
    FileOutputStream fos; 
    try { 
     fos = new FileOutputStream(fileName); 
     getWorkbook().write(fos); 
     fos.close(); 
    } catch (IOException e) { 
     System.out.println("IOException occurs"); 
     e.printStackTrace(); 
    } 
} 
にこの(変更)ワークブックを書きです
+0

それはそうではありません。マクロがExcelの値を変更するためです。マクロがデータソースからデータを読み込んでそのセルを更新する –

+0

実行時に変更されることがわかっていますが、このブックを別のファイルに書き込まない限り、その違いはわかりません。それを試してください –

関連する問題