using System; using unoidl.com.sun.star.lang; using unoidl.com.sun.star.uno; 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.util; namespace main { class Program { static void Main(string[] args) { // получаем контекст компонентов офиса XComponentContext xContext = uno.util.Bootstrap.bootstrap(); // получаем сервис-менеджер XMultiComponentFactory xServiceManager = (XMultiComponentFactory)xContext.getServiceManager(); Object desktop = xServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", xContext); // получаем экземпляр сервиса UNO Desktop // получаем интерфейс XComponentLoader XComponentLoader xComponentLoader = (XComponentLoader)desktop; // создаем новый документ PropertyValue[] loadProps = new PropertyValue[2]; loadProps[0] = new PropertyValue(); loadProps[0].Name = "FilterName"; loadProps[0].Value = new uno.Any("calc8"); loadProps[1] = new PropertyValue(); loadProps[1].Name = "Overwrite"; loadProps[1].Value = new uno.Any(true); XComponent xComponent = xComponentLoader.loadComponentFromURL("file:///C:/test/document.ods", "_blank", 0, loadProps); //Получаем объект документа XSpreadsheetDocument xDoc = (XSpreadsheetDocument)xComponent; //Получаем объект листов XSpreadsheets xSheets = xDoc.getSheets(); //Получаем интерфейс XIndexAccess для доступа к элементам по индексу XIndexAccess xSheetIA = (XIndexAccess)xSheets; //Получаем объект листа с индеком 0 ссылающийся на интерфейс XCellRange XCellRange xSheet = (XCellRange)xSheetIA.getByIndex(0).Value; //Получаем объект с диапазоном ячеек XCellRange xCellRange = xSheet.getCellRangeByName("A1:B3"); //Получаем XPropertySet для доступа к свойствам объектов XPropertySet xProps = (XPropertySet)xCellRange; //Указываем свойства границы выбранного диапазона ячеек TableBorder2 tableBorder = new TableBorder2(); tableBorder.TopLine.LineWidth = 50; tableBorder.BottomLine.LineWidth = 50; tableBorder.RightLine.LineWidth = 50; tableBorder.LeftLine.LineWidth = 50; tableBorder.IsTopLineValid = true; tableBorder.IsBottomLineValid = true; tableBorder.IsLeftLineValid = true; tableBorder.IsRightLineValid = true; //Устанавливаем указанные свойства //Используем конструктор uno.Any(Type, object), для передачи конкретного типа данных для правильно сериализации объекта. Без этого конструктора uno.Any не знает какой тип данных содержится внутри объекта 'tableBorder' xProps.setPropertyValue("TableBorder2", new uno.Any(typeof(TableBorder2), tableBorder)); //Получаем объект диапазаона ячеек для объединения XCellRange xCellRangeMerge = xSheet.getCellRangeByName("D1:E3"); //Получаем объект XMergeable XMergeable xMerge = (XMergeable)xCellRangeMerge; //Объединяем ячейки xMerge.merge(true); // получаем интерфейс XStorable для текущего документа XStorable xStorable = (XStorable)xComponent; // задаем URL для сохранения документа string saveUrl = "file:///C:/test/document.ods"; // сохраняем документ xStorable.storeAsURL(saveUrl, loadProps); // закрываем документ //xComponent.dispose(); } } }