Arthur Welsch
Arthur Welsch

Reputation: 269

LibreOffice Mail Merge with Java

I'm trying to use the libre office mail merge functionality automatically from an java application.

I have tried to install the libreoffice sdk but without success because they require software that is not available anymore (e.g. zip-tools). Anyway I was able to get the jar files (jurtl-3.2.1.jar, ridl-3.2.1.jar, unoil-3.2.1.jar and juh-3.2.1.jar) from the maven repository.

With this jar files I was able to reproduce a lot of examples which are provided here http://api.libreoffice.org/examples/examples.html#Java_examples

Also in the LibreOffice API documentation a service named 'MailMerge' is listed (see here http://api.libreoffice.org/docs/idl/ref/servicecom_1_1sun_1_1star_1_1text_1_1MailMerge.html)

But in none of the jar's this service class is available, the only instance available for me is MailMergeType.

I'm able to open an *.odt templatefile within my javacode and the next step would be to create an instance of the mail merge service and pass a *.csv datasourcefile to the mail merge service.

At the API documentation some functions are listed which could help me but as I said before I'm not able to get access to this service class because its simply not exist in the provided jar files.

Do anybody know how I can get access to the mail merge service for libreoffice?

If you need more information about my environment just ask.

Sincerly

Upvotes: 0

Views: 1299

Answers (1)

Jim K
Jim K

Reputation: 13790

Looking at this code from 2004, apparently you can simply use Java's Object class. Here are a few snippets from that code:

Object mmservice = null;
try {
    // Create an instance of the MailMerge service
    mmservice = mxMCF.createInstanceWithContext(
        "com.sun.star.text.MailMerge", mxComponentContext);
}
// Get the XPropertySet interface of the mmservice object
XPropertySet oObjProps = (XPropertySet)
    UnoRuntime.queryInterface(XPropertySet.class, mmservice);
try {
    // Set up the properties for the MailMerge command
    oObjProps.setPropertyValue("DataSourceName", mDataSourceName);
}
// Get XJob interface from MailMerge service and call execute on it
XJob job = (XJob) UnoRuntime.queryInterface(XJob.class, mmservice);
try {
    job.execute(new NamedValue[0]);
}

See also How to do a simple mail merge in OpenOffice.

Regarding a source for the old zip tools, try zip.exe from http://www.willus.com/archive/zip64/.

Upvotes: 1

Related Questions