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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.03.2007, 14:19   #1  
Protey is offline
Protey
Участник
 
143 / 15 (1) ++
Регистрация: 22.09.2005
Адрес: Сургут
Вопрос по ComExcelDocument_RU
Можно из аксапты изменять шрифт, делать его жирным или курсивом, центрировать по ячейке?
Старый 28.03.2007, 14:29   #2  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
можно, но нужно доработать класс
Старый 28.03.2007, 14:30   #3  
LEX is offline
LEX
NavAx
Аватар для LEX
NavAx Club
 
33 / 12 (1) ++
Регистрация: 06.04.2004
Можно!
вот пример метода для изменения шрифта:
X++:
void setFontSize(MSOfficeBookMark_RU _bookMark, int _fontNumber)
{
    COM     comRange;
    COM     comFont;
    ;

    comRange = this.findRange(_bookMark);
    if (comRange)
    {
        comFont = comRange.Font();
        comFont.Size(_fontNumber);
    }
}
Старый 28.03.2007, 14:40   #4  
Ashir is offline
Ashir
Участник
 
45 / 22 (1) +++
Регистрация: 27.10.2005
X++:
public void setFontFormatInRange(   MSOfficeBookMark_RU _bookMark,
                                    int                 _workSheet  = 1,
                                    boolean             _Bold       = false,
                                    boolean             _Italic     = false,
                                    boolean             _Underline  = false )
{
    #define.xlUnderlineStyleSingle(2)
    #define.xlUnderlineStyleNone(-4142)
    COM Rng, Font;

    Rng  = this.findRange(_bookMark, _workSheet);
    Font = Rng.font();
    Font.Bold(_Bold);
    Font.Italic(_Italic);
    if (_Underline)
        Font.Underline(#xlUnderlineStyleSingle);
    else
        Font.Underline(#xlUnderlineStyleNone);
}
Старый 28.03.2007, 15:11   #5  
Protey is offline
Protey
Участник
 
143 / 15 (1) ++
Регистрация: 22.09.2005
Адрес: Сургут
А выравнивание в ячейке (слева, справа, в центре) никак?
Старый 28.03.2007, 15:37   #6  
LEX is offline
LEX
NavAx
Аватар для LEX
NavAx Club
 
33 / 12 (1) ++
Регистрация: 06.04.2004
X++:
void setHorAlignment(MSOfficeBookMark_RU _bookMark, int    _hAlign)
{
    COM     comRange;
    ;

    comRange = this.findRange(_bookMark);
    if (comRange)
    {
        comRange.horizontalAlignment(_hAlign);
    }
}
Старый 28.03.2007, 15:42   #7  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Protey Посмотреть сообщение
А выравнивание в ячейке (слева, справа, в центре) никак?
Найдите у себя на компе поиском хелп-файл vbaxl*.chm (вместо звездочки будет конкретная версия: 9 или 10 или 11). В этом файле найдите поиском и почитайте про свойства: VerticalAlignment и HorizontalAlignment. Далее воплотите их в X++ (по аналогии с тем, как вам уже рассказали про фонты).

P.S. О! Вам уже и выравнивание воплотили. Но почитать хелп все равно рекомендую для творческого осмысления.
Старый 29.03.2007, 13:34   #8  
Protey is offline
Protey
Участник
 
143 / 15 (1) ++
Регистрация: 22.09.2005
Адрес: Сургут
Всем спасибо, а еще такой вопрос, такого я не нашел, можно сделать внешние границы ячейки?
Старый 29.03.2007, 13:40   #9  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Protey Посмотреть сообщение
а еще такой вопрос, такого я не нашел, можно сделать внешние границы ячейки?
А где вы ищите? В хелп-файле, о котором я говорил, ищите слово Border и всё, что с ним связано.
Сделайте операцию, которую хотите, в Excel'е вручную и запишите макрорекордером. Посмотрите как это выглядит на VBA и всё будет ясно, какие ключевые слова нужно будет искать.

99.9 % того, что вы можете сделать в Excel вручную, вы можете сделать и из Аксапты программно.

Много и хорошо об Excel для программистов
Старый 29.03.2007, 14:00   #10  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Более того, большую часть из того, что вам может понадобиться, кто - нибудь да уже написал.
Соответственно, вы можете это найти на форуме

Как вставить значение из Аксапты в Excel
Старый 29.03.2007, 14:34   #11  
Ashir is offline
Ashir
Участник
 
45 / 22 (1) +++
Регистрация: 27.10.2005
Цитата:
можно сделать внешние границы ячейки
X++:
void setRangeBorder(COM _comRange, int _type  = 1)
{
    Com com;
    ;

    com = _comRange.Borders();
    com.LineStyle(_type);
}
Старый 29.03.2007, 14:36   #12  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
А еще важен здравый баланс затрачиваемых усилий. Жирную левую границу ячейки, конечно, можно нарисовать и из Аксапты (как и из Дельфи, например). А можно и из Аксапты заставить Дельфи нарисовать границу ячейки в Excel

Всегда стоит подумать, не существенно ли проще, например, заготовить вручную в Excel соответствующий шаблон с крутым форматированием, а потом многократно его использовать, выводя в него из Аксапты только лишь данные. Можно даже использовать исходный код VBA, записанный макрорекордером в родном Excel и вызываемый из Аксапты для исполнения в Excel же, т.е. без "перевода" кода с языка VBA на язык X++.

Позволю себе немножко поразглагольствовать на любимую тему. Форматирование таблицы Excel из Аксапты - это как бы задача второго эшелона, а первоочередное - собственно вывод данных. Т.е. когда данные отчета находятся уже в Excel, почему бы не поручить самому Excel по-привычному "по-родному" с ними разобраться. Причем, вряд ли Excel'ю потребуются еще какие-нибудь данные от Аксапты во время форматирования (чего не скажешь об Аксапте, которую для комфортной работы разработчика необходимо, например, "набить" макросами эксельных констант). В теме "Axapta программирует Excel на VBA" у меня была такая цитата:
Цитата:
Сообщение от Gustav Посмотреть сообщение
...форматирование выводимого списка используется исключительно для того, чтобы продемонстрировать ЧТО-ЛИБО, выполняемое на коде VBA (а не классом Axapta). С таким же успехом в рамках примера можно было бы построить, например, в Excel развесистую сводную таблицу. Средствами самого же Excel, причем дальнейший перевод VBA-кода в код X++ не требуется
Изящно подобный подход демонстрирует AndyD здесь: Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент). Т.е. я-то там (в "Axapta...на VBA") по неопытности тогдашней навернул какие-то таблицы для хранения кода (мечтал о том, что разработчики будут обмениваться наработками в таком формате ), а AndyD взял целую процедуру и в один стринг ее поместил. Вот фрагмент его кода, который я имею в виду:
X++:
    s = strfmt( "sub OpenDemo()\n" +
                "    Workbooks.OpenText Filename:=\"%1\", Origin:=1251, StartRow:= 1, _\n" +
                "        DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, Tab:=True, _\n" +
                "        %2TrailingMinusNumbers:=True, _\n" +
                "        DecimalSeparator:=\",\", ThousandsSeparator:=\" \"\n" +
                "End Sub", #fileName, getFields());
Т.е. взята VBA-шная процедура, записанная в Excel макрорекордером, подчищена и вставлена стрингом в код X++. Затраты времени - минимальные. И фактически используются естественные инструменты той среды "обитания", где происходит выполнение задачи.
Старый 29.03.2007, 15:49   #13  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Известен ли народу способ копирования шаблонных областей, не портящий буфер обмена?
Старый 29.03.2007, 16:25   #14  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Можно воспользоваться автозаполнением

Range.AutoFill(RangeDest, xlFillFormats);

xlFillFormats = 3

PS Только для связанных областей
Range("A1:C1") -> RangeDest("A1:C100")
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 29.03.2007 в 16:32.
Старый 30.03.2007, 20:33   #15  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от belugin Посмотреть сообщение
Известен ли народу способ копирования шаблонных областей, не портящий буфер обмена?
Если речь идёт именно о копировании с целью распространения формата, то можно еще попробовать использовать стили, созданные при помощи команды "Стиль" из меню "Формат" Excel.

В прилагаемом шаблоне Book5.xlt определен форматный стиль по имени "MyCoolStyle", включающий в себя голубую заливку ячейки, а также рамку, состоящую из трёх тонких границ (сверху, слева, снизу) и одной толстой справа. Стиль был определен вручную при помощи команды меню Excel "Format \ Style" (стили сохраняются в workbook'ах). Далее при создании отчета на базе шаблона Book5.xlt стиль можно применить к желаемой ячейке или диапазону ячеек:
X++:
static void Job_TestExcelStyle(Args _args)
{
    COM xlApp;      // Excel.Application
    COM wbks, wbk;  // Workbooks, Workbook
    COM rng;        // Range
    ;

    xlApp = new COM('Excel.Application');
    xlApp.Visible(true);

    wbks = xlApp.Workbooks();
    wbk  = wbks.Open(@'C:\Book5.xlt');

    rng  = xlApp.Range('B2:H20');
    rng.Style('MyCoolStyle'); 
    // и всё зальётся голубым с правыми толстыми границами :-)
}
Для демонстрации эффекта вручную (без Аксапты) можно открыть файл в архиве, выделить диапазон ячеек Excel и выполнить команду меню Формат \ Стиль \ выбрать Имя стиля: MyCoolStyle \ OK
Вложения
Тип файла: zip Book5.zip (1.9 Кб, 76 просмотров)
Старый 05.04.2007, 10:34   #16  
Protey is offline
Protey
Участник
 
143 / 15 (1) ++
Регистрация: 22.09.2005
Адрес: Сургут
Цитата:
Сообщение от Ashir Посмотреть сообщение
X++:
void setRangeBorder(COM _comRange, int _type  = 1)
{
    Com com;
    ;

    com = _comRange.Borders();
    com.LineStyle(_type);
}
где то я туплю, а как при вызове этого метода задать ему диапазон?
чета не получается...
Старый 05.04.2007, 10:39   #17  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
Вот так:
X++:
XLSrange        = this.findRange(_bookMark);
где _bookMark имеет формат ячеек (например "A1:C15")
Старый 05.04.2007, 10:39   #18  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Это COM
X++:
    COM rng;        // Range
//more lines go here ...
    rng  = xlApp.Range('B2:H20');
  //Вот это и есть этот самый _comRange
Старый 05.04.2007, 10:46   #19  
Protey is offline
Protey
Участник
 
143 / 15 (1) ++
Регистрация: 22.09.2005
Адрес: Сургут
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Это COM
X++:
    COM rng;        // Range
//more lines go here ...
    rng  = xlApp.Range('B2:H20');
  //Вот это и есть этот самый _comRange
у меня шаблон объявляется так
excelDocument = new ComExcelDocument_RU();
он не понимает такого, или я чета не понимаю
Старый 05.04.2007, 10:49   #20  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Скорее второе.

Напишите метод в классе ComExcelDocument_RU

X++:
void setRangeBorder(MSOfficeBookMark_RU bookMark, int _type  = 1, int _worksheet = 1)
{
    Com com;
    COM comRange;
    ;
    comRange = this.findRange(bookMark, _worksheet);
    com = comRange.Borders();
    com.LineStyle(_type);
}
Теги
excel

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вопрос по модулю Расчеты с персоналом. Выплата заработной платы. Keks DAX: Функционал 7 28.12.2009 10:31
Вопрос по созданию отчета asd1274 DAX: Программирование 6 05.12.2008 21:44
Вопрос по Проектам PSA DAX: Функционал 35 19.01.2007 22:26
Еще вопрос про покрытие по аналитикам в Сводном планировании rt2 DAX: Функционал 3 24.03.2006 18:56
расчеты с персоналом. НДФЛ. вопрос чайника shumelka DAX: Функционал 2 25.03.2004 11:36
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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