I'm currently trying to do a mailmerge, using C# and OpenOffice.
I have a list of destanatary in my DB. I would like this to be possible :
- the user edit an OO document, put fields like "name" "adresse" "city" and some standard text (e.g. : "Hello Name how are you ?",
- edit the style, etc etc,
- then go to my application, clic on "Send to all user in DB".
Then the program loops through all user, and for each user replace the mailmerge fields in the OO document with DB data's, send it by mail/print/whatever.
Problem : I can't find any way, in C#, to replace the mailmerge fields in the OO document with DB data's, because i can't find what Property/Method handle these fields.
Please help me by annual bonus depends on it ! (sic)
Only pointer I found was that it seems I'll need the UNO Library, but it seems it doesn't exist in C#.
General help on using C# with OpenOffice:
http://www.oooforum.org/forum/viewtopic.phtml?p=151606 http://opendocument4all.com/content/view/68/47/
With OO 3.0 you'll need to reference cli_*.dll libraries, they are put to GAC when OO is installed.
A sample code to initialize OO connection:
private static XMultiServiceFactory _multiServiceFactory;
private static XComponentLoader _componentLoader;
private static XFileIdentifierConverter _urlConverter;
private static void Initialize()
{
XComponentContext localContext = uno.util.Bootstrap.bootstrap();
_multiServiceFactory = (XMultiServiceFactory)localContext.getServiceManager();
_componentLoader = (XComponentLoader)_multiServiceFactory.createInstance("com.sun.star.frame.Desktop");
_urlConverter = (XFileIdentifierConverter)_multiServiceFactory.createInstance("com.sun.star.ucb.FileContentProvider");
}
Loading document:
string url = _urlConverter.getFileURLFromSystemPath(Path.GetPathRoot(path), path);
XComponent xComponent = _componentLoader.loadComponentFromURL(url, "_blank", 0, new PropertyValue[] { MakePropertyValue("Hidden", new uno.Any(true))});
XTextDocument doc = (XTextDocument)xComponent;
where
private static PropertyValue MakePropertyValue(string cName, Any uValue)
{
PropertyValue oPropertyValue = new PropertyValue();
if (!string.IsNullOrEmpty(cName))
oPropertyValue.Name = cName;
oPropertyValue.Value = uValue;
return oPropertyValue;
}
Read more on what you can do we XTextDocument here.
See also OpenOffice.org Developer's guide.
UPDATE.
One more useful link:
http://blog.nkadesign.com/2008/net-working-with-openoffice-3/
Hope this helps
来源:https://stackoverflow.com/questions/1166057/mailmerge-using-openoffice