2011-08-04 33 views
8

我:如何從Java中的Apache POI庫調用宏?

  • 宏命名爲「過程」,做所有的處理工作,爲我的工作表。

  • 我想讓我的Java代碼使用Apache POI來調用這個宏,以便它可以爲我處理工作表。

  • 如何在Java中的Apache POI中調用宏?

::注意::

  • 我在Apache的POI使用import org.apache.poi.ss.usermodel

  • 請給出示例代碼。 (我是新來的Apache POI和Java本身。)

回答

10

我不認爲這是可能的。 POI是一個讀取/編輯Office文件的庫,宏是一個完整的其他野獸。您必須將Visual Basic for Applications解釋器實現爲POI才能完成此操作。已保存在Excel工作簿中的宏將保留,但不能添加新的或調用現有的宏。

+0

我已經在我正在編輯的文件中有宏。 **我只是想用Java POI執行宏!** –

+13

**那是不可能的** – Jacob

+0

請注意,當前版本的POI支持常規的Excel函數。 – parasietje

4

我想,你不能。

宏無法創建。但是,讀取和重寫包含宏的文件 將安全地保留這些宏。

Apache POI Limitations

+0

我已經在我正在編輯的文件中有宏。 **我只是想用Java POI執行宏!** –

+9

反覆陳述你的目標不會讓它神奇地發生。 – Ben

6

您可以使用其他工具一樣com4j。我在今天創建了一個POC,並且像魅力一樣工作。只要按照下列步驟操作:

  1. 下載最新版本here
  2. 使用Apache Ant構建示例:樣本\ EXCEL
  3. 與TLBIMP生成的代碼(這只是一個com4j的一部分),創建一個小應用程序,並寫這樣一個代碼:

    // Starts excel and open an existing workbook 
    _Application app = ClassFactory.createApplication(); 
    app.setVisible(0, true); 
    _Workbook wb = app.getWorkbooks().open("c:\\test.xlsx", null, null, null, null, null, null, null, 
         null, null, null, null, null, null, null, 0); 
    
    // run a macro 
    Variant macro = new Variant(Variant.Type.VT_BSTR); 
    macro.set("my_macro"); 
    wb.getApplication().run(macro, null, null, null, null, null, null, null, null, null, null, null, 
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
         null, null, null, null); 
    
    // Save the excel file and quit 
    Variant saveBeforeExit = new Variant(Variant.Type.VT_BOOL); 
    saveBeforeExit.set(1); 
    wb.close(saveBeforeExit, Variant.getMissing(), Variant.getMissing(), 0); 
    app.quit(); 
    
  4. 進一步的實例:com4j tutorials

+3

真的有幫助嗎?有沒有人證實這一點? –