Как выполнить MS Word VBA с JACOB

Я добавил процедуру VBA (saveasdoc) в Normal.dot.

Я протестировал его с файлом .docx:

  1. Сохраняет открытый файл с тем же именем в новый файл .doc.
  2. Выход из приложения MS Word.

Я хочу запустить эту процедуру VBA из приложения Java, используя библиотеку JACOB.

Вот что я пробовал:

System.out.println("Start!!");
File docfile = new File("C:/test.docx");
ActiveXComponent word = new ActiveXComponent("Word.Application");
word.setProperty("Visible", new Variant(true));
Dispatch oDocuments = word.getProperty("Documents").toDispatch();
Dispatch.call(oDocuments, "saveasdoc()", docfile.getPath()).toDispatch();
System.out.println("End!!");

Приложение MS Word отображается, и документ загружается, но единственный заявленный код исполнителя макроса создает исключение :

SEVERE: null
com.jacob.com.ComFailException: Can't map name to dispid: saveasdoc()
  at com.jacob.com.Dispatch.invokev(Native Method)
  at com.jacob.com.Dispatch.invokev(Dispatch.java:625)
  at com.jacob.com.Dispatch.invokev(Dispatch.java:625)
  at com.jacob.com.Dispatch.callN(Dispatch.java:453)
  at com.jacob.com.Dispatch.call(Dispatch.java:541)
  at WordProcessing.main(WordProcessing.java:30)

person Jalal Sordo    schedule 03.06.2014    source источник


Ответы (1)


Вам нужен Application.Run (http://msdn.microsoft.com/en-us/library/aa220716%28v=office.11%29.aspx)

Не проверено, но общее направление, в котором вы должны двигаться:

System.out.println("Start!!");
File docfile = new File("C:/test.docx");
ActiveXComponent application = new ActiveXComponent("Word.Application");
Dispatch.call(application, "Run", new Variant("saveasdoc"), new Variant(docfile.getPath()));
System.out.println("End!!");
person Tony BenBrahim    schedule 13.06.2014