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

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

Пытаюсь подружить ахапту с опенофисом (через COM), да все никак..нужна помощь..

Вопросы следующие:

1. Каким образом установить ориентацию листа, поля? Т.е. элементы pagesetup..
2. Каким образом отформатировать дробное число с определенным количеством знаков после запятой?

Очень жду ответов, благодарю спасибками
__________________
..в каждой программе есть хотя бы одна ошибка..
Старый 26.04.2010, 08:10   #2  
Alexanderrrr is offline
Alexanderrrr
Участник
Аватар для Alexanderrrr
 
54 / 19 (1) ++
Регистрация: 06.03.2009
Адрес: Саратов
ап. Неужели нет решения?..
мне достаточно намеков, в какую сторону копать..код приводить необязательно.
__________________
..в каждой программе есть хотя бы одна ошибка..
Старый 26.04.2010, 08:55   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Для MS Office, стандартным путём поиска ответа на вопросы а как программно (через COM) сделать то-то и то-то, является запись макроса, и дальнейший анализ его кода. Благо делается это в два клика мышкой, а внутренний интерфейс (VBA) совпадает с внешним (COM).

P.S.: Как с этим дело обстоит в OpenOffice я не знаю
За это сообщение автора поблагодарили: Alexanderrrr (1).
Старый 26.04.2010, 09:27   #4  
Alexanderrrr is offline
Alexanderrrr
Участник
Аватар для Alexanderrrr
 
54 / 19 (1) ++
Регистрация: 06.03.2009
Адрес: Саратов
Да, с майкрософт офисом все отлично..
Спасибо и на этом

вот с опенфисом как быть..многое получилось сделать и границы и ширину колонок..а вот эти два момента пока никак не решу..
__________________
..в каждой программе есть хотя бы одна ошибка..
Старый 26.04.2010, 11:35   #5  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
Цитата:
Сообщение от Alexanderrrr Посмотреть сообщение
ап. Неужели нет решения?..
мне достаточно намеков, в какую сторону копать..код приводить необязательно.
если кода не надо, то просто перечислю файлы, которые помогли мне когда писал выгрузку в OO
Learn.OpenOffice.org.Spreadsheet.Macro.Programming.pdf
"OpenOffice.org.BASIC Guide.pdf"
OpenOffice_Macros_rus.pdf

в принципе, они легко находятся через google
__________________
С уважением, Вячеслав.
За это сообщение автора поблагодарили: Alexanderrrr (1).
Старый 27.04.2010, 09:55   #6  
Alexanderrrr is offline
Alexanderrrr
Участник
Аватар для Alexanderrrr
 
54 / 19 (1) ++
Регистрация: 06.03.2009
Адрес: Саратов
Спасибо, почитал..
Решил сделать на основе template. Проблем меньше.
__________________
..в каждой программе есть хотя бы одна ошибка..
Старый 17.06.2010, 14:58   #7  
Alexanderrrr is offline
Alexanderrrr
Участник
Аватар для Alexanderrrr
 
54 / 19 (1) ++
Регистрация: 06.03.2009
Адрес: Саратов
Долго бился с OO, конечно. В конце концов оказалось проще сделать выгрузку отчета на базе template (шаблона).

Вот пример создания экземпляра документа OO из шаблона:
X++:
void createdocument()
{
    COM MyStruct;
    COM oDeskTop;
    int i;
    COMVariant arg;
    COMVariant byte;
    Array arr = new Array(Types::Class);
    ComDispFunction Func;
    COMVariant varArg1 = new COMVariant();
    COMVariant var = new COMVariant();
    str filepath;
;
    //Создание экземпляра OpenOffice.org
    OpenOffice = new Com("com.sun.star.ServiceManager");
    oDeskTop = OpenOffice.CreateInstance("com.sun.star.frame.Desktop");

    MyStruct = OpenOffice.Bridge_GetStruct("com.sun.star.beans.PropertyValue");

    Func = new COMDispFunction(MyStruct, "Name",  COMDispContext::PropertyPut);
    varArg1.bStr("AsTemplate");
    Func.call(varArg1);

    Func = new COMDispFunction(MyStruct, "Value",  COMDispContext::PropertyPut);
    varArg1.boolean(true);
    Func.call(varArg1);

    var = COMVariant::createFromCOM(MyStruct);
    arr.value(1,var);

    // Создание документа
    arg = COMVariant::createFromArray(arr);
    filepath = "file://///path_to_template";
    oDocument = oDeskTop.LoadComponentFromURL(filepath, "_blank", 0, arg);
}
Обращение к листу:
X++:
    oSheets   = oDocument.getSheets();
    oSheet    = oSheets.getByIndex(0);
Вставка значения в ячейку:
X++:
oRange = oSheet.getCellByPosition(5,0);
oRange.Setstring("Пример");
Форматирование ячейки:
X++:
    #define.BOLD(150)
    #define.FONTNAME("Arial Cyr")
    #define.FONTHEIGHT(10)
;
oRange.setPropertyValue("CharWeight", #BOLD);
oRange.setPropertyValue("CharFontName", #FONTNAME);
oRange.setPropertyValue("CharHeight", #FONTHEIGHT);
oRange.setPropertyValue("HoriJustify",2);
Объединение ячейки:
X++:
oRange.merge(true);
Видимость столбца:
X++:
    oColumn = oSheet.getColumns();
    oColumn_new=oColumn.getByIndex(0);
    oColumn_new.setPropertyValue("IsVisible", False);
Ширина столбца:
X++:
    oColumn = oSheet.getColumns();
    oColumn_new=oColumn.getByIndex(0);
    oColumn_new.setPropertyValue("Width",2440);
Для установки границ ячейки применяю отдельный метод:
X++:
void SetBorder(COM range,boolean _left=true,boolean _right=true,boolean _top=true,boolean _bottom=true)
{
    COM MyStruct;
    ComDispFunction func;
    COMVariant varArg1 = new COMVariant();
;
    MyStruct = OpenOffice.Bridge_GetStruct("com.sun.star.table.BorderLine");

    func = new COMDispFunction(MyStruct, "OuterLineWidth",  COMDispContext::PropertyPut);
    varArg1.int(1);
    func.call(varArg1);

    func = new COMDispFunction(MyStruct, "InnerLineWidth",  COMDispContext::PropertyPut);
    varArg1.int(0);
    func.call(varArg1);

    func = new COMDispFunction(MyStruct, "LineDistance",  COMDispContext::PropertyPut);
    varArg1.int(0);
    func.call(varArg1);

    if (_top)
    range.SetPropertyValue('TopBorder', MyStruct);
    if (_left)
    range.SetPropertyValue('LeftBorder', MyStruct);
    if (_right)
    range.SetPropertyValue('RightBorder', MyStruct);
    if (_bottom)
    range.SetPropertyValue('BottomBorder', MyStruct);
}
Пример использования:
X++:
    oRange = oSheet.getCellRangeByName("A1:B1");
    this.SetBorder(oRange);
Для моих задач этого мне хватило. Такие вещи, как: ориентация листа, масштаб, поля..это все в template выставил..
Надеюсь это кому-то поможет..
__________________
..в каждой программе есть хотя бы одна ошибка..
За это сообщение автора поблагодарили: alexbn (1), lev (6), sable102 (1), CHESER85 (1).
Старый 03.04.2013, 14:59   #8  
sable102 is offline
sable102
Участник
Аватар для sable102
Злыдни
 
34 / 21 (1) +++
Регистрация: 22.07.2011
Адрес: тундра
Подскажите пожалуйста.
хочу добавить диапазон значении в таком виде.

X++:
    COM Document, Sheets, Sheet, Range;
    ArrayExtend_RU  line = new ArrayExtend_RU(Types::String,3);
    .....
    Sheets   = Document.getSheets();
    Sheet    = Sheets.getByIndex(0);
    Range    = Sheet.getCellRangeByName("A2:C2");
    line.value(1, "a");
    line.value(2, "b");
    line.value(3, "c");
    Range.Value2(line);
выдает ошибку
X++:
  : COM     "Value2".
как его правильно вывести ?
Старый 05.04.2013, 08:34   #9  
sable102 is offline
sable102
Участник
Аватар для sable102
Злыдни
 
34 / 21 (1) +++
Регистрация: 22.07.2011
Адрес: тундра
Совсем не хочет строку вставлять он у меня, по всякому перепробовал
Вставка диапазона в ОО делается методом setDataArray(). но не могу подобрать параметр, тип параметра для передачи.
По всякому пробовал
X++:
    COM Document, Sheets, Sheet, Range;
    Array arr = new Array(Types::Class);
    COMVariant var;
............
    Sheets   = Document.getSheets();
    Sheet    = Sheets.getByIndex(0);
    Range    = Sheet.getCellRangeByName("A2:C2");
   
    arr.value(1, COMVariant::createFromStr("a"));
    arr.value(2, COMVariant::createFromDate(systemdateget()));
    arr.value(3, COMVariant::createFromInt(1));

    var     = ComVariant::createFromArray(arr);
    Range.setDataArray(var);
и так тоже
X++:
    COM Document, Sheets, Sheet, Range;
    Array arr = new Array(Types::Class);
   
    COMVariant var_sf = new COMVariant(
                        COMVariantInOut::IN_OUT,
                        COMVariantType::VT_SAFEARRAY);
............
    Sheets   = Document.getSheets();
    Sheet    = Sheets.getByIndex(0);
    Range    = Sheet.getCellRangeByName("A2:C2");
   
    arr.value(1, COMVariant::createFromStr("a"));
    arr.value(2, COMVariant::createFromDate(systemdateget()));
    arr.value(3, COMVariant::createFromInt(1));
    
    var_sf.safeArray(arr, COMVariantType::VT_VARIANT);
    Range.setDataArray(var_sf);
Все ведет к ошибке
X++:
:
 "setDataArray"  COM-  "<неизвестно>"    0x80020009 (DISP_E_EXCEPTION), 
 : [automation bridge]com.sun.star.script.CannotConvertException 
in UnoConversionUtilities<T>::variantToAny! Message: conversion not possible!.
помогите советом, может я вообще не туда копаю((
Старый 08.04.2013, 13:44   #10  
sable102 is offline
sable102
Участник
Аватар для sable102
Злыдни
 
34 / 21 (1) +++
Регистрация: 22.07.2011
Адрес: тундра
тишина, печаль(
Изображения
 
Старый 09.04.2013, 11:39   #11  
Xardas is offline
Xardas
Участник
 
28 / 13 (1) ++
Регистрация: 19.09.2012
А что мешает написать метод, выводящий массив (или контейнер) поэлементно?
X++:
container   string;
.....
for (col = 1; col <= conlen(string); col++)
  {
   Cell = Sheet.getCellByPosition(col - 1, row - 1);
   Cell.Value = conpeek(string, col);
  }
Старый 10.04.2013, 06:53   #12  
sable102 is offline
sable102
Участник
Аватар для sable102
Злыдни
 
34 / 21 (1) +++
Регистрация: 22.07.2011
Адрес: тундра
Цитата:
Сообщение от Xardas Посмотреть сообщение
массив (или контейнер) поэлементно
Так же будет медленно, если в строке, допустим, 15-20 элементов, хотелось бы вставить одним обращением к OO.
Старый 10.04.2013, 07:20   #13  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
медленно - не будет!


вообще тут много много много раз обсуждалось как быстро выгружать в эксель. TextBuffer, ADO и тд и тп.
Оу сорри это опен офис, не знаю как там...

Последний раз редактировалось Sada; 10.04.2013 в 07:22.
Теги
openoffice

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как открыть шаблон в 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
dynamicsusers: The Style Sheet Tool for Microsoft Dynamics NAV Blog bot DAX Blogs 2 05.07.2007 05:51
Axapta+OpenOffice mmm DAX: Программирование 3 20.02.2007 16:50

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

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

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