如何从Java中的Apache POI库调用macros?

我有 :

  • 名为“process”的macros为我的工作表执行所有处理工作。

  • 我想要使​​用Apache POI的Java代码来调用这个macros,以便它可以为我处理表单。

  • 如何在Java中的Apache POI中调用macros?

:: 注意 ::

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

  • 请给出示例代码。 (我是Apache POI和Java本身的新手。)

我不认为这是可能的。 POI是一个读取/编辑Office文件的库,macros是另一个完整的野兽。 您将不得不实施一个Visual Basic应用程序解释器到POI来完成这一点。 已经在Excel工作簿中的macros将被保留,但不能添加新的或调用现有的macros。

您可以使用其他工具,如com4j 。 我在今天创造了一个POC,像一个魅力。 只需按照以下步骤操作

  1. 在这里下载最新版本
  2. 使用Apache Ant构build示例: samples \ excel
  3. 使用由tlbimp生成的代码(它只是com4j的一部分),创build一个小应用程序并编写如下代码:

     // 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教程

我想,你不能。

macros

macros不能被创build。 但是,读取和重写包含macros的文件将安全地保存macros。

Apache POI限制