tags:

views:

259

answers:

3

I have a VB macro created. I want to pass the macro a string and a file location. How would I call this in java code. Is there a library for this?

A: 

There is the "JACOB - Java COM Bridge" on SourceForge. The project has a second, more dated homepage.

And then there is a commercial (D)COM/ActiveX automation library called J-Integra, which also looks like it could do such a thing.

Disclaimer: Those are just links I've pulled out of Google, I have no practical experience with these libraries.

Tomalak
A: 

You can run vbscript using the "cscript.exe" that ships with windows.

Depending upon your scenario, you can launch this from Java in a variety of ways:

  • use Runtime.exec to launch the program. You can do this directly as part of your program.
  • use Ant, which has an exec task, or maven which has an exec plugin. This is most useful when invoking the script as part of a build or some other batch process.

EDIT: If your script has a GUI, then use "wscript.exe".

I'm assuming you mean vbscript, but if you reall mean a macro, such as a Word macro, then you will need to do something like this:

"C:\Program Files\Microsoft Office\Office12\Winword.exe" 
"C:\MyPath\MyDoc.doc" /m"Macro1"

Alternatively, you can create a small vbscript that instantiates the Word Application and uses the run() method to invoke a macro. You execute that script using cscript.exe/wscript.exe.

mdma
is it possibe to invoke these on another server? i.e. instead of paths to files on the local machine, I pass them paths to files on another server "//servername/Program Files\Microsoft Office\Office12\Winword.exe"I have a windows server where the files are stored but my web application is hosted on a linux server.
Holograham
Not directly - your linux box is not going to be able to run Winword. However, you could use ssh - which will allow you to run an executable on your windows box from linux.
mdma
A: 

We are using Com4J, which created us a set of Java Classes which looks identical to the ActiveX classes usable from Word VBA, and call those directly. This obviously only works on Windows machines, since Word does not run on Linux (except for when you have much time and Wine).

By having these APIs ready in Java, we would be able to call any macro defined in word.

Daniel