title: Mail Merge from a dataset in C# ASP.NET
body: <p>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? </p>
  
  <pre><code>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; 
  
  }
  </code></pre>