Книга знаний

1С:Предприятие / Приемы программирования / OLE, COM

Автоматизация OpenOffice Calc на 1С

Управление OpenOffice Calc из 1С 7.7 через UNOАвтор статьи: jbond | Редакторы: Волшебник,
Последняя редакция №7 от 17.05.06 | История
URL: http://kb.mista.ru/article.php?id=180

Ключевые слова: UNO, OpenOffice, Calc, OpenDocument, Array


Основная проблема при работе с 7.7 - это проблема передачи массивов через COM.
Здесь предлагается, вероятно, наилучшее решение этой проблемы.
Оно базируется на идее и коде smаhаrbА на Нью-Территории 1С.

   scr = СоздатьОбъект("MSScriptControl.ScriptControl");
   scr.language = "javascript";
   scr.eval("Массив=new Array()");
   Массив = scr.eval("Массив");
   scr.AddCode("function SetItem(ind,val){Массив[ind]=val}");
   
   ServiceManager=СоздатьОбъект("com.sun.star.ServiceManager");
   scr.AddObject("ServiceManager",ServiceManager);
   Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
   Document = Desktop.LoadComponentFromURL("private:factory/scalc", "_blank", 0, Массив);
   Листы = Document.getSheets();
   Лист = Листы.getByIndex(0);
   Для к = 0 По 10 Цикл
      Лист.getCellByPosition(0,к).value = к;
   КонецЦикла;
   SaveParam = scr.Eval("ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
   SaveParam.Name = "FilterName";
   SaveParam.Value = "MS Excel 97";
   scr.CodeObject.SetItem(0,SaveParam);
   Document.storeToURL("file:///c:/Test.xls",Массив);


По адресу http://1c.proclub.ru/modules/mydownloads/personal.php?cid=5&lid=6573
можно найти первые наброски по разработке библиотеки классов 1С++ для автоматизации OO.

Очень подробный хелп + примеры по автоматизации OO через UNO можно изучить, скачав SDK:
http://api.openoffice.org/SDK/index.html
Он также содержится в архиве исходных тестов OO2RC3, опубликованных в журнале LinuxFormat #2 за 2006 г.

Среди библиотек непосредственой работы с OpenDocument можно отметить AODL (для .Net 1.1)
http://sourceforge.net/projects/aodl

Пример создания ODS файла с использованием AODL на C#:
using System;
using AODL;
using AODL.Document.Content.Tables;

namespace AodlTest
{
class MainClass
{
public static void Main(string[] args)
{

AODL.Document.SpreadsheetDocument sd;

sd = new AODL.Document.SpreadsheetDocument();

sd.New();
Table table = new Table(sd,"Table1","");
sd.TableCollection.Add(table);
Cell cell = table.createCell();
cell.OfficeValueType = AODL.Document.SpreadsheetDocuments.Tables.Style.OfficeValueTypesFloat;
cell.OfficeValue = "2.1";
table.InsertCellAt(2,3,cell);
sd.SaveTo("output.ods");
}
}
}


OO на компьютере не требуется, т.к. происходит непосредственное создание документа ODS.

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика