2009-07-22 54 views
3

我目前正在尝试使用C#和OpenOffice做一个mailmerge。Mailmerge使用OpenOffice

我在我的数据库中有一个destanatary的列表。我想这是可能的:

  • 用户编辑面向对象的文档,把 领域,如“名”,“住址”,“城市” 和一些标准文本(例如:“你好 名称如何你呢?”,
  • 编辑风格,等等等等,
  • 然后去我的应用程序,集团公司在 ‘发送到数据库中的所有用户。’

然后程序遍历所有用户,并且为每个用户使用DB数据替换OO文档中的mailmerge字段,通过邮件/打印/其他方式发送。

问题:我找不到任何方式,在C#中,用DB数据替换OO文档中的mailmerge字段,因为我无法找到属性/方法处理这些字段。

请帮助我的年度奖金取决于它! (原文如此)

我发现的唯一指针是看起来我需要UNO库,但它似乎并不存在于C#中。

回答

4

使用C#与OpenOffice的一般帮助:

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

有了OO 3.0则需要参考CLI _ * DLL库,安装OO当他们投入到GAC。

示例代码初始化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"); 
} 

加载文件:

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

了解更多关于你可以做什么,我们XTextDocument here。请参阅OpenOffice.org Developer's guide

UPDATE。 一个更加有用的链接:
http://blog.nkadesign.com/2008/net-working-with-openoffice-3/

希望这有助于

+0

感谢您的回答,但什么是使用后“在哪里”的代码?有关C#/ OpenOffice的文档非常少:/ – 2009-07-23 06:20:32