Проблемы с OpenOffice Writer с использованием C # - PullRequest
0 голосов
/ 29 января 2011

Я создаю документ OO Writer с помощью C #.

Буду признателен за любую помощь - я больше не знаю, прихожу я или ухожу, я пробовал так много вариантов ...

используя C #, кто-нибудь успешно заставил работать следующее? У меня есть простая таблица из 2 столбцов, и я хочу установить ширину столбцов для разных значений (фактическое значение на данном этапе неважно - просто не одинаковые значения ширины).

Этот код адаптирован из различных веб-источников, приведенных в качестве примеров ширины столбцов. Я не могу заставить его работать ....

//For OpenOffice....  
using unoidl.com.sun.star.lang;  
using unoidl.com.sun.star.uno;  
using unoidl.com.sun.star.bridge;  
using unoidl.com.sun.star.frame;  
using unoidl.com.sun.star.text;  
using unoidl.com.sun.star.beans;  
..............................  
XTextTable odtTbl = (XTextTable) ((XMultiServiceFactory)oodt).createInstance("com.sun.star.text.TextTable");  
odtTbl.initialize(10, 2);  
XPropertySet xPS = (XPropertySet)odtTbl;  
Object xObj = xPS.getPropertyValue("TableColumnSeparators")**; // << Runtime ERROR**
TableColumnSeparator[] xSeparators = (TableColumnSeparator[])xObj;  
xSeparators[0].Position = 500;  
xSeparators[1].Position = 5000;  
xPS.setPropertyValue("TableColumnSeparators", new uno.Any(typeof(unoidl.com.sun.star.text.XTextTable),xSeparators));  

// Runtime ERROR indicates the ; at the end of the Object line, with message of IllegalArgumentException

Теперь это только один тип ошибок из всех комбинаций попыток. Совсем немного разрешено выполнение, но приведенный выше код действительно работал до ошибки.

Какой правильный код для этого в C #, пожалуйста?

Кроме того, каков правильный код C # для установки заголовка O'Writer для определенного стиля (например, «Заголовок 1»), чтобы он выглядел и печатался в этом стиле в документе?

Спасибо.

1 Ответ

0 голосов
/ 09 февраля 2011
        unoidl.com.sun.star.uno.XComponentContext localContext = uno.util.Bootstrap.bootstrap();
        unoidl.com.sun.star.lang.XMultiServiceFactory multiServiceFactory = (unoidl.com.sun.star.lang.XMultiServiceFactory)localContext.getServiceManager();
        XComponentLoader componentLoader =(XComponentLoader)multiServiceFactory.createInstance("com.sun.star.frame.Desktop");
        XComponent xComponent = componentLoader.loadComponentFromURL(
        "private:factory/swriter", //a blank writer document
        "_blank", 0, //into a blank frame use no searchflag
        new unoidl.com.sun.star.beans.PropertyValue[0]);//use no additional arguments.
        //object odtTbl = null;
        //odtTbl = ((XMultiServiceFactory)xComponent).createInstance("com.sun.star.text.TextTable");

        XTextDocument xTextDocument = (unoidl.com.sun.star.text.XTextDocument)xComponent;
        XText xText = xTextDocument.getText();
        XTextCursor xTextCursor = xText.createTextCursor();

                    XPropertySet xTextCursorProps = (unoidl.com.sun.star.beans.XPropertySet) xTextCursor;
                    XSimpleText xSimpleText = (XSimpleText)xText;

                    XTextCursor xCursor = xSimpleText.createTextCursor();

        object objTextTable = null;
        objTextTable = ((XMultiServiceFactory)xComponent).createInstance("com.sun.star.text.TextTable");
        XTextTable xTextTable = (XTextTable)objTextTable;
        xTextTable.initialize(2,3);
        xText.insertTextContent(xCursor, xTextTable, false);


        XPropertySet xPS = (XPropertySet)objTextTable;  
        uno.Any xObj = xPS.getPropertyValue("TableColumnSeparators");
        TableColumnSeparator[] xSeparators = (TableColumnSeparator[])xObj.Value;  //!!!! xObj.Value

        xSeparators[0].Position = 2000;  
        xSeparators[1].Position = 3000;
        xPS.setPropertyValue("TableColumnSeparators", new uno.Any(typeof(TableColumnSeparator[]), xSeparators)); //!!!! TableColumnSeparator[]
...