AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.06.2010, 16:02   #1  
Alexanderrrr is offline
Alexanderrrr
Участник
Аватар для Alexanderrrr
 
54 / 19 (1) ++
Регистрация: 06.03.2009
Адрес: Саратов
OpenOffice (автофигуры)
Доброго времени суток, всем знатокам и гуру Аксапты!

Продолжение темы OpenOffice (Sheet orientation, cell format).

Возникла задача - добавить автофигуру.

Записал макрос:

Код:
sub Macro1
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "InsertDraw"
args1(0).Value = 2

dispatcher.executeDispatch(document, ".uno:InsertDraw", "", 0, args1())

end sub
Создаю документ на основе шаблона, затем пытаюсь в него вставить автофигуру таким образом:
X++:
void addShape()
{
    ComDispFunction func;
    COMVariant varArg = new COMVariant();
    COMVariant var = new COMVariant();
    COMVariant arg;
    Array arr = new Array(Types::Class);
    COM CreateUnoService;    
    COM oParam;
;
    oParam=OpenOffice.bridge_GetStruct('com.sun.star.beans.PropertyValue');
    Func = new COMDispFunction(oParam, "Name",  COMDispContext::PropertyPut);
    varArg.bStr("InsertDraw");
    Func.call(varArg);
    Func = new COMDispFunction(oParam, "Value",  COMDispContext::PropertyPut);
    varArg.int(2);
    Func.call(varArg);

    CreateUnoService = OpenOffice.createInstance("com.sun.star.frame.DispatchHelper");
    var = COMVariant::createFromCOM(oParam);
    arr.value(1,var);
    arg = COMVariant::createFromArray(arr);

    CreateUnoService.executeDispatch(oDocument,".uno:InsertDraw","",0,arg);
}
Ругается:
Цитата:
Метод "executeDispatch" в COM-объекте класса "<неизвестно>" возвратил код ошибки 0x80020005 (DISP_E_TYPEMISMATCH), который означает: Один или большее количество аргументов не мог быть преобразовано.
Есть такие подозрения:
  • последний параметр arg..возможно executeDispatch ждет массива..
  • COM-переменная oDocument, возможно на этом месте должен быть не сам документ, а frame..

Помогите, люди добрые..
__________________
..в каждой программе есть хотя бы одна ошибка..

Последний раз редактировалось Alexanderrrr; 17.06.2010 в 16:20.
За это сообщение автора поблагодарили: x-act (0).
Старый 01.07.2010, 10:58   #2  
Alexanderrrr is offline
Alexanderrrr
Участник
Аватар для Alexanderrrr
 
54 / 19 (1) ++
Регистрация: 06.03.2009
Адрес: Саратов
Копал не в том направлении.

Привожу работающий код для добавления прямоугольника в OpenOffice:

X++:
    COM oRange;
    COM oSheets;
    COM oSheet;
    COM oShape;
    COM oSize;
    COM oPos;
    COM oPage;
    ComDispFunction func;
    COMVariant varArg1 = new COMVariant();
    ;

    //что такое oDocument можно посмотреть в предыдущей теме про опенофис
    oSheets   = oDocument.getSheets();
    oSheet    = oSheets.getByIndex(0);

    oPage = osheet.getDrawPage();
    oShape = oDocument.createInstance('com.sun.star.drawing.RectangleShape');    

    //зададим размеры прямоугольника
    oSize = oDocument.Bridge_GetStruct('com.sun.star.awt.Size');
    
    func = new COMDispFunction(oSize, "width",  COMDispContext::PropertyPut);
    varArg1.int(1000);
    func.call(varArg1);
    
    func = new COMDispFunction(oSize, "height",  COMDispContext::PropertyPut);
    varArg1.int(1000);
    func.call(varArg1);        
    
    oShape.setSize(oSize);

    //зададим позицию прямоугольника
    oPos = oDocument.Bridge_GetStruct('com.sun.star.awt.Point');

    func = new COMDispFunction(oPos, "x",  COMDispContext::PropertyPut);
    varArg1.int(100);
    func.call(varArg1);
    
    func = new COMDispFunction(oPos, "y",  COMDispContext::PropertyPut);
    varArg1.int(100);
    func.call(varArg1);
   
    oShape.setPosition(oPos);
 
    oPage.add(oShape);
__________________
..в каждой программе есть хотя бы одна ошибка..
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как открыть шаблон в OpenOffice? PT DAX: Программирование 28 16.12.2010 06:13
DeniZone: OpenOffice and Dynamics ax Blog bot DAX Blogs 0 12.12.2008 13:05
OpenOffice форматирование PT DAX: Программирование 8 13.12.2007 15:54
Ищу класс для работы с OpenOffice kBace4ka DAX: Программирование 9 12.12.2007 10:57
Axapta+OpenOffice mmm DAX: Программирование 3 20.02.2007 16:50

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:31.