Вопрос

В настоящее время я пытаюсь создать mailmerge, используя C # и OpenOffice.

У меня есть список destanatary в моей базе данных.Я бы хотел, чтобы это было возможно :

  • пользователь редактирует документ OO, вводит такие поля, как "имя", "адрес", "город" и некоторый стандартный текст (например:"Привет Имя как у тебя дела ?",
  • отредактируйте стиль и т.д. И т.п.,
  • затем перейдите в мое приложение, нажмите на "Отправить всем пользователям в базе данных".

Затем программа перебирает всех пользователей и для каждого пользователя заменяет поля mailmerge в документе OO данными DB, отправляет их по почте / распечатывает / что угодно.

Проблема : Я не могу найти никакого способа на C # заменить поля mailmerge в документе OO данными DB, потому что я не могу найти, какое свойство / метод обрабатывает эти поля.

Пожалуйста , помогите мне , от этого зависит годовой бонус !(так в оригинале)

Единственный указатель, который я нашел, заключался в том, что, похоже, мне понадобится библиотека UNO, но, похоже, ее не существует в C #.

Это было полезно?

Решение

Общая справка по использованию C # с OpenOffice:

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

С OO 3.0 вам нужно будет ссылаться на библиотеки cli_ *.dll, они передаются в GAC при установке OO.

Пример кода для инициализации 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 здесь.

Смотрите также OpenOffice.org Руководство разработчика.

Обновить.Еще одна полезная ссылка:
http://blog.nkadesign.com/2008/net-working-with-openoffice-3/

Надеюсь, это поможет

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top