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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.05.2007, 11:01   #1  
PT is offline
PT
Участник
Аватар для PT
 
22 / 10 (1) +
Регистрация: 11.08.2004
Адрес: Сибирь
OpenOffice форматирование
Привет всем. Я создаю документ OpenOffice эл.табл . Вставляю туда текст. Все нормально. Но совершенно не получается его отформатировать из кода. Хотя бы шрифт изменить и формат ДатаВремя назначить ячейке..
вот код, подскажите
X++:
static void oo_2(Args _args)
{
    COM OpenOffice;
    COM oDeskTop;
    COM oDocument;
    COM oscr;
    COM oSheets;
    COM oRange;
    COM oSheet;
    COM oNumberFormats;
    COM oFormat;
    COM oMassiv;
    COM oSaveParam;
    COM oLocale;
    COM oParam;
    COM oAAA;
    COM oText;
    int i;
    COMVariant arg;
    COMVariant byte;
    Array arr = new Array(Types::String);

    //Создание экземпляра OpenOffice.org
    OpenOffice = new Com("com.sun.star.ServiceManager");
    oDeskTop = OpenOffice.CreateInstance("com.sun.star.frame.Desktop");

    // create and initialize a COMVariant object
    arg  = COMVariant::createFromArray(arr);

    //Создание документа
    oDocument = oDeskTop.LoadComponentFromURL("private:factory/scalc", "_blank", 0, arg);
    oSheets   = oDocument.getSheets();
    oSheet    = oSheets.getByIndex(0);
    oNumberFormats = oDocument.getNumberFormats();
    oLocale   = OpenOffice.bridge_GetStruct( "com.sun.star.lang.Locale" );
    oParam=OpenOffice.bridge_GetStruct('com.sun.star.beans.PropertyValue');
    byte      = COMVariant::createFromStr("com.sun.star.util.NumberFormat.DATETIME");
//    oFormat   = oNumberFormats.getStandardFormat(arg.byte(2),olocale);
    for(i=1; i<15;i++)
        {
        oRange = oSheet.getCellByPosition(1,i);
        oRange.Setstring('Прелесть какая');
        oRange = oSheet.getCellByPosition(2,i);
        oRange.SetValue(i);
        oRange = oSheet.getCellByPosition(3,i);
        oRange.SetString(date2str(today(),123,2,2,2,2,4));
        oRange = oSheet.getCellByPosition(4,i);
        oRange.SetString(today());
        oText  = oRange.Text();//
        print(oText.charHeight());
        oAAA   = oText.createTextCursor();
        print(oAAA.charHeight());
        oAAA.CharHeight(25);
        print(oAAA.charHeight());
        oParam.Name("Bold");
        oParam.Value("true");
        //oRange.setFormat(oFormat);
        }
     oRange = oSheet.getCellRangeByName("C1:C10");
     pause;

    oSaveParam=oDocument.setPropertyValue("FilterName","MS Excel 97");
    }
Старый 29.05.2007, 17:25   #2  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Цитата:
Сообщение от PT Посмотреть сообщение
Привет всем. Я создаю документ OpenOffice эл.табл . Вставляю...
А где можно посмотреть объектную модель OpenOffice ?
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
Старый 30.05.2007, 05:53   #3  
PT is offline
PT
Участник
Аватар для PT
 
22 / 10 (1) +
Регистрация: 11.08.2004
Адрес: Сибирь
признаюсь - за основу я взяла код из 1с
http://www.forum.mista.ru/topic.php?...&area=exchange

А объектная модель есть здесь
http://lists.altlinux.ru/pipermail/o...er/008421.html
Старый 30.05.2007, 10:20   #4  
PT is offline
PT
Участник
Аватар для PT
 
22 / 10 (1) +
Регистрация: 11.08.2004
Адрес: Сибирь
у меня получилось, но не все (рамка для ячеек не рисуется и формат даты, может еще что-нибудь вылезет...)

X++:
....
//*****выделить диапазон + границы
    BorderStruct = OpenOffice.Bridge_GetStruct('com.sun.star.table.BorderLine');
    BorderStruct.Color(24567057);
    BorderStruct.LineDistance(0);
    BorderStruct.InnerLineWidth(0);
    BorderStruct.OuterLineWidth(1);
//    oRange = oSheet.getCellByPosition(8,1,9,1);
    oRange = oSheet.getCellRangeByName("H2:I2");
    oRange.merge(true);
    oRange.setPropertyValue("CellBackColor", 16764057);
    oRange.SetPropertyValue("LeftBorder",BorderStruct);
    oRange.SetPropertyValue("RightBorder",BorderStruct);
    oRange.SetPropertyValue("TopBorder",BorderStruct);
    oRange.SetPropertyValue("BottomBorder",BorderStruct);
//*****************************
    for(i=1; i<10;i++)
        {
        oRange = oSheet.getCellByPosition(0,i);
        oRange.SetValue(i);
        oRange.setPropertyValue("CellStyle", "Result");
        oRange = oSheet.getCellByPosition(1,i);
        oRange.Setstring('Прелесть');
        oRange.setPropertyValue('CharPosture',100);
        oRange = oSheet.getCellByPosition(2,i);
        oRange.SetValue(i*i);
        oRange.setPropertyValue('CharWeight',200);
        oRange.setPropertyValue('CharUnderline',124);
        oRange = oSheet.getCellByPosition(3,i);
        oRange.SetString(date2str(today(),123,2,2,2,2,4));
        oRange.setPropertyValue("CharColor", 500);
        oRange.setPropertyValue('CharShadowed', True);
        oRange = oSheet.getCellByPosition(4,i);
        oRange.SetString(today());
        oRange.setPropertyValue("CellBackColor", 0x99CCFF);
        oRange.setPropertyValue("CharHeight", 12);
        oRange.setPropertyValue("IsTextWrapped", True);
        oRange = oSheet.getCellByPosition(5,i);
        oRange.SetString(today());
        oRange.setPropertyValue("CellStyle", "Date");
        }
Старый 30.05.2007, 13:02   #5  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Цитата:
Сообщение от PT Посмотреть сообщение
признаюсь - за основу я взяла код из 1с
http://www.forum.mista.ru/topic.php?...&area=exchange

А объектная модель есть здесь
http://lists.altlinux.ru/pipermail/o...er/008421.html
Да уж там так все запутано, надо время найти разобраться...
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
Старый 30.05.2007, 13:53   #6  
DocSerzh is offline
DocSerzh
Участник
 
51 / 22 (0) +++
Регистрация: 28.06.2004
Пользовался примером - хватило...
http://rsdn.ru/article/openoffice/ooautomation.xml

внизу ссылки полезные....
Старый 04.07.2007, 11:08   #8  
PT is offline
PT
Участник
Аватар для PT
 
22 / 10 (1) +
Регистрация: 11.08.2004
Адрес: Сибирь
примеры хорошие, но у меня ни в какую не получается нарисовать рамку ячейкам.
Устала тупить самостоятельно. Подскажите где собака зарыта..
X++:
static void oo_1(Args _args)
{
    COM OpenOffice;
    COM oDeskTop;
    COM oDocument;
    COM oscr;
    COM oSheets;
    COM oRange;
    COM oSheet;
    COM MyStruct;
    COMVariant arg;
    Array arr = new Array(Types::String);
    //Создание экземпляра OpenOffice.org
    OpenOffice = new Com("com.sun.star.ServiceManager");
    oDeskTop = OpenOffice.CreateInstance("com.sun.star.frame.Desktop");
    // create and initialize a COMVariant object
    arg = COMVariant::createFromArray(arr);
    //Создание документа
    oDocument = oDeskTop.LoadComponentFromURL("private:factory/scalc", "_blank", 0, arg);
    oSheets   = oDocument.getSheets();
    oSheet    = oSheets.getByIndex(0);

    oRange = oSheet.getCellRangeByPosition(2,3,5,7);
    oRange.setPropertyValue("CellBackColor", 1300003);
    MyStruct =OpenOffice.Bridge_GetStruct("com.sun.star.table.BorderLine");
    MyStruct.color(13047173);
    MyStruct.lineDistance(0);
    MyStruct.innerLineWidth(0);
    MyStruct.outerLineWidth(1);
    oRange.leftBorder(MyStruct);
    oRange.rightBorder(MyStruct);
    oRange.topBorder(MyStruct);
    oRange.bottomBorder(MyStruct);
}
Старый 13.12.2007, 15:54   #9  
c_makarov is offline
c_makarov
Участник
 
2 / 15 (1) ++
Регистрация: 14.03.2007
Цитата:
Сообщение от PT Посмотреть сообщение
примеры хорошие, но у меня ни в какую не получается
нарисовать рамку ячейкам.
Вот часть кода, которая предназначена для отрисовки рамки:

X++:
void setBorder(str _borderName = "", int color = 0, int innerLineWidth = 0, int outerLineWidth = 10, int lineDistance = 0)
{
    COM MyStruct;
    ComDispFunction func;
    COMVariant varArg1 = new COMVariant();


    MyStruct = OpenOffice.Bridge_GetStruct("com.sun.star.table.BorderLine");

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

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

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

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

    Cell.SetPropertyValue(_borderName, MyStruct);
}
Cell - это ячейка
OpenOffice - это объект OpenOffice



Передаваемые параметры:
_borderName - имя линии - например "LeftBorder", "RightBorder", "TopBorder", "BottomBorder"
_color - цвет _blue + (_green * 256) + (_red * 65536)
_innerLineWidth - толщина внутренней линии в сотых долях миллиметра
_outerLineWidth - толщина внешней линии в сотых долях миллиметра
_lineDistance - расстояние между внутренней и внешней линиями
За это сообщение автора поблагодарили: Lucky13 (2).
Теги
документация

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как открыть шаблон в 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 kBace4ka DAX: Программирование 9 12.12.2007 10:57
Axapta+OpenOffice mmm DAX: Программирование 3 20.02.2007 16:50
Axapta i OpenOffice januszek DAX: Прочие вопросы 3 15.11.2004 14:31
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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