Я добавил процедуру VBA (saveasdoc) в Normal.dot.
Я протестировал его с файлом .docx:
- Сохраняет открытый файл с тем же именем в новый файл .doc.
- Выход из приложения 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)