2009-07-22 8 views
3

J'essaye actuellement de faire un mailmerge, en utilisant C# et OpenOffice.Mailmerge utilisant OpenOffice

J'ai une liste de destanatary dans ma base de données. Je voudrais que cela soit possible:

  • l'utilisateur de modifier un document OO, mis champs comme « ville » et un texte standard « nom » « adresse » (par exemple: « Bonjour Nom comment sont vous? »,
  • modifier le style, etc etc,
  • puis aller à ma demande, cliquez sur "Envoyer à tous les utilisateurs dans DB".

ensuite, le programme à travers toutes les boucles utilisateur, et pour chaque utilisateur, remplacez les champs mailmerge dans le document OO par des données DB, envoyez-le par mail/print/whatever. Problème: Je ne trouve aucun moyen, en C#, de remplacer les champs mailmerge dans le document OO par des données DB, car je ne peux pas trouver quelle propriété/méthode gère ces champs.

S'il vous plaît aidez-moi par un bonus annuel en dépend! (sic)

Seul pointeur que j'ai trouvé était qu'il semble que j'aurai besoin de la bibliothèque UNO, mais il semble qu'il n'existe pas en C#.

Répondre

4

aide générale sur l'utilisation de C# avec OpenOffice.

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

Avec OO 3.0, vous aurez besoin de faire référence à cli _ * bibliothèques dll, ils sont mis à GAC lorsque OO est installé.

Un exemple de code pour initialiser la connexion OO:

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

document de chargement:

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; 

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

En savoir plus sur ce que vous pouvez faire, nous XTextDocument here.

Voir aussi OpenOffice.org Developer's guide.

MISE À JOUR. Un lien plus utile:
http://blog.nkadesign.com/2008/net-working-with-openoffice-3/

Hope this helps

+0

Merci pour votre réponse, mais quelle est l'utilisation du code après « où »? Il y a si peu de documentation sur C#/OpenOffice:/ –

+0

Cette fonction est utilisée dans le second bloc de code –

Questions connexes