Работа с LibreOffice из C#
Потребовалось управлять libreoffice writer/calc из visual c# wpf. C Microsoft Word/Excel это уже делал через Microsoft.Office.Interop Скиньте, пожалуйста, ссылку на пошаговую инструкцию, как связать visual c# wpf и libreoffice. Описание функций и, если можно, примеры. Запустить, открыть файл (или создать новый) изменить содержимое, сохранить. Как я понимаю, все должно быть примерно так как с Microsoft.Office.Interop Помогите, кто чем может!
Ответы (1 шт):
Автор решения: Reidenschi
→ Ссылка
В статье автор через C# создает пустой документ LibreOffice Calc и заполняет ячейки А1 и В2 данными.
Проверил лично, метод работает.
Обязательно установите LibreOffice SDK и подключите ссылки к своему проекту.
using System;
//
// UNO references needed:
// cli_basetypes, cli_cppuhelper, cli_oootypes.dll, cli_uno, cli_ure, cli_uretypes.
//
using unoidl.com.sun.star.uno;
using unoidl.com.sun.star.lang;
using unoidl.com.sun.star.frame;
using unoidl.com.sun.star.beans;
using unoidl.com.sun.star.sheet;
using unoidl.com.sun.star.container;
using unoidl.com.sun.star.table;
using unoidl.com.sun.star.text;
namespace con_03
{
class Program
{
static void Main (string [] args)
{
Console.WriteLine ("Hello Scalc!");
XComponentContext ctx = uno.util.Bootstrap.bootstrap ();
XMultiServiceFactory srv_manager = (XMultiServiceFactory)ctx.getServiceManager ();
XComponentLoader component_loader = (XComponentLoader)srv_manager.createInstance ("com.sun.star.frame.Desktop");
string url = @"private:factory/scalc";
XComponent component = component_loader.loadComponentFromURL (url, "_blank", 0, new PropertyValue [0]);
XSpreadsheetDocument document = (XSpreadsheetDocument)component;
XSpreadsheets sheets = document.getSheets ();
XIndexAccess sheets_index = (XIndexAccess)sheets;
XSpreadsheet sheet = (XSpreadsheet)sheets_index.getByIndex (0).Value;
XCell c1 = sheet.getCellByPosition (0, 0);
((XText)c1).setString ("BlaBla");
XCell c2 = sheet.getCellByPosition (1, 1);
c2.setValue (123);
}
}
}