19.02.2007, 19:19 | #1 |
Участник
|
Axapta+OpenOffice
Добрый день!
Вот, как-то на досуге решил посмотреть, а возможно ли их подружить (знаю что раньше нельзя было, но с тех пор многое что изменилось). Нашел код, для создания экземпляра и создания нового документа (в частности OpenOffice.org Calc) и поробывал адаптировать под Axaptу. X++: static void Job2(Args _args) { COM OpenOffice; COM scr; COM DeskTop; COM Document; COM ; //Создание экземпляра OpenOffice.org OpenOffice = new Com("com.sun.star.ServiceManager"); DeskTop = OpenOffice.CreateInstance("com.sun.star.frame.Desktop"); // В вариантном массиве содержатся опции открытия документа, // в виде пар название опции – значение опции. // Например, если не нужно показывать окно OpenOffice.org, // можно передать данной функции массив, содержащий пару: Hidden (название опции) – // true(значение опции). scr=new Com("MSScriptControl.ScriptControl"); scr.language("javascript"); scr.eval("Массив=new Array()"); scr.AddObject("OpenOffice",OpenOffice); scr.eval("Массив[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); scr.eval("Массив[0].Name='Hidden'"); scr.eval("Массив[0].Value=false"); =scr.eval("Массив"); //Создание документа Document = DeskTop.LoadComponentFromURL("private:factory/scalc", "_blank", 0, ); } Указанный аргумент [retval] должен быть последним параметром в вызове метода "LoadComponentFromURL". Может кто подскажет, что не так? Заранее спасибо. |
|
19.02.2007, 21:24 | #2 |
Участник
|
может приведете код, который вы портировали?
можете его портировать на VBS или JS? не может быть что вы перепутали с количеством аргументов? нет ли в классе COMVariant статического метода, который создает нужный вам массив? |
|
20.02.2007, 12:50 | #3 |
Участник
|
Вот два варианта кода один для
1С: Код: OpenOffice = СоздатьОбъект("com.sun.star.ServiceManager"); scr=СоздатьОбъект("MSScriptControl.ScriptControl"); scr.language="javascript"; scr.eval("Массив=new Array()"); Массив=scr.eval("Массив"); scr.AddObject("OpenOffice",OpenOffice); scr.eval("Массив[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); scr.eval("Массив[0].Name='Hidden'"); scr.eval("Массив[0].Value=false"); DeskTop = OpenOffice.CreateInstance("com.sun.star.frame.Desktop"); Document = DeskTop.LoadComponentFromURL("private:factory/scalc", "_blank", 0, Массив); Код: ServiceManager = CreateOleObject("com.sun.star.ServiceManager"); Desktop = ServiceManager.OleFunction("createInstance","com.sun.star.frame.Desktop"); Document = Desktop.OleFunction("LoadComponentFromURL", "private:factory/scalc", "_blank", 0, VariantArray ); |
|
20.02.2007, 16:50 | #4 |
Участник
|
Получилось...
X++: static void Job2(Args _args) { COM OpenOffice; COM DeskTop; COM Document; COMVariant arg; Array arr = new Array(Types::String); //Создание экземпляра OpenOffice.org OpenOffice = new Com("com.sun.star.ServiceManager"); DeskTop = OpenOffice.CreateInstance("com.sun.star.frame.Desktop"); // create and initialize a COMVariant object arg = COMVariant::createFromArray(arr); //Создание документа Document = DeskTop.LoadComponentFromURL("private:factory/scalc", "_blank", 0, arg); } |
|
|
За это сообщение автора поблагодарили: belugin (14), _AnK_ (1). |
Теги |
openoffice, интеграция, экспорт |
|
|