0

I am new to OpenOffice and have been reading lots of articles about it. I need to code mail merge functionality in C# to instruct OpenOffice to perform a mail merge on a supplied document. I have seen lots of mail merge examples using VB.NET but when I convert the VB to C# the mailmerge component of it always fails to create correctly. My code is as follows. I have commented out the mail merge code as it doesn't compile with it in. How would I correct the code so it performed the mail merge?

public int InitialiseOpenOffice() 
{ 
    // This is the document with the mail merge tags in that I want to be used as the source. 
    string filePathStr = "file:///C:/DotNetDev/MailMerge//MailMergeSample.doc"; 

    Type openOffice; 
    openOffice = Type.GetTypeFromProgID("com.sun.star.ServiceManager"); 
    object objServiceManager = System.Activator.CreateInstance(openOffice); 

    // arguments for IDispatch-call 
    object[] parameters = new object[1]; 
    parameters[0] = "com.sun.star.frame.Desktop"; 

    // arguments for document 
    object[] args = new object[4]; 
    args[0] = "private:factory/swriter"; 
    args[1] = "_blank"; 
    args[2] = 0; 
    args[3] = new object[] { }; 

    // arguments for document 
    object[] existingargs = new object[4]; 
    existingargs[0] = filePathStr; 
    existingargs[1] = "_blank"; 
    existingargs[2] = 0; 
    existingargs[3] = new object[] { }; 

    object startdesktop; 
    object doc; 
    try 
    { 
       startdesktop = (object)openOffice.InvokeMember("createInstance", 
       BindingFlags.InvokeMethod, null, 
       objServiceManager, parameters); 
       doc = startdesktop.GetType().InvokeMember("loadComponentFromUrl", 
       BindingFlags.InvokeMethod, null, startdesktop, existingargs); 

       object openOfficeServiceManagerObj = System.Activator.CreateInstance(openOffice); 

       // arguments for MailMerge 
       object[] mailMergeParameters = new object[1]; 
       mailMergeParameters[0] = "com.sun.star.text.MailMerge"; 
       // 
       // 
       // All the code up to this point works, but the code below doesn't.  At this 
       // point OponOffice is open with the document I want to use in the mailmerge. 
       //
       //
       //Type t_OOo; 
       //t_OOo = Type.GetTypeFromProgID("com.sun.star.ServiceManager"); 
       //objServiceManager = System.Activator.CreateInstance(t_OOo); 
       //object oMailMerge; 
       //oMailMerge = t_OOo.InvokeMember("createInstance", BindingFlags.InvokeMethod, null, objServiceManager, new Object[] { "com.sun.star.text.MailMerge" }); 
       //oMailMerge.DocumentURL = "file:///C:/Users/me/Desktop/OpenOffice Investigation/mail merged.odt"; 
       //oMailMerge.DataSourceName = "adds"; 
       //oMailMerge.CommandType = 0; 
       //oMailMerge.Command = "adds"; 
       //oMailMerge.OutputType = 2; 
       //oMailMerge.execute(new Object[] { }); 

       if (doc == null) 
       { 
         return 1; // error!! 
       } 

   } 
   catch (Exception e) 
   { 
       string s = e.Message; 
       return 1; 
   } 

   return 0; 

}

1 Answer 1

0

Looks like this has been addressed at Mailmerge using OpenOffice...

Sign up to request clarification or add additional context in comments.

1 Comment

I have already seen this URL nowhere does it tell you how to do the actual mail merge it just seems to skirt over the subject.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.