2009-07-22 7 views
3

Ich versuche derzeit eine Mailmerge zu machen, mit C# und OpenOffice.Mailmerge mit OpenOffice

Ich habe eine Liste von Destanatary in meiner DB. Ich möchte dies möglich:

  • der Benutzer bearbeiten ein OO-Dokument setzen Felder wie „name“ „adresse“ „Stadt“ und einige Standardtext (zB: „Hallo Namen wie sind Sie?“,
  • bearbeiten den Stil, etc etc,
  • dann auf meine Bewerbung gehen, klicken Sie auf "an alle Benutzer in DB".

dann wird das Programm in einer Schleife durch alle Benutzer, und für jeden Benutzer ersetzen die mailmerge Felder im OO-Dokument mit DB-Daten, senden Sie es per E-Mail/print/was auch immer.

Problem: Ich kann in C# keine Möglichkeit finden, die Mailmerge-Felder im OO-Dokument durch DB-Daten zu ersetzen, weil ich nicht finden kann, welche Eigenschaft/Methode diese Felder behandelt.

Bitte helfen Sie mir von jährlichen Bonus hängt davon ab! (sic)

Nur Zeiger, den ich fand, war, dass es scheint, dass ich die UNO-Bibliothek benötige, aber es scheint, dass es in C# nicht existiert.

Antwort

4

Allgemeine Hilfe zur Verwendung C# mit Openoffice.

http://www.oooforum.org/forum/viewtopic.phtml?p=151606 http://opendocument4all.com/content/view/68/47/

mit OO 3.0 Sie benötigen cli verweisen _ * DLL-Bibliotheken, werden sie auf GAC setzen, wenn OO installiert ist.

Ein Codebeispiel OO Verbindung zu initialisieren:

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"); 
} 

Laden Dokument:

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; 

wo

private static PropertyValue MakePropertyValue(string cName, Any uValue) 
{  
    PropertyValue oPropertyValue = new PropertyValue(); 
    if (!string.IsNullOrEmpty(cName)) 
     oPropertyValue.Name = cName; 
    oPropertyValue.Value = uValue; 
    return oPropertyValue; 
} 

Lesen Sie mehr auf das, was wir Ihnen here XTextDocument tun können.

Siehe auch OpenOffice.org Developer's guide.

UPDATE. Ein nützlicher Link:
http://blog.nkadesign.com/2008/net-working-with-openoffice-3/

hoffe, das hilft

+0

Vielen Dank für Ihre Antwort, aber was ist die Verwendung des Codes nach dem „Wo“? Es gibt so wenig Dokumentation zu C#/OpenOffice:/ –

+0

Diese Funktion wird im zweiten Codeblock verwendet –

Verwandte Themen