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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.06.2012, 14:29   #1  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
ComExcelDocument_RU доработка и вопрос
1. доработка =)
X++:
comRange = excel.findRange(ComExcelDocument_RU::numToNameCell(1, 1) + ":" +
                           ComExcelDocument_RU::numToNameCell(3, 10), 1);
этот код выделяет диапазон ячеек A1:С10, чтобы можно было выделить просто колонки A-С, поидее хочется во второй парамент передать 0, но в итоге получается "A0:C0" и вылазит ошибка, поэтому в методе ComExcelDocument_RU::numToNameCell правим
X++:
szRet += int2str(_iRow);
на
X++:
    if (_iRow != 0)
    szRet += int2str(_iRow);
соответственно диапазон получится "A:C"

2. вопрос: использовал конструкцию выше и группировку (линейка для сворачивания\разворачивания)
X++:
comRange = excel.findRange(ComExcelDocument_RU::numToNameCell(1, 1) + ":" +
                           ComExcelDocument_RU::numToNameCell(3, 10), 1);
comRange.Group();
линейка на диапазоне колонок появилась, но в раскрытом состоянии, а как в свернутом по-умолчанию сделать?
Старый 20.06.2012, 14:49   #2  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
в свое время делал группировку строк, и сворачивал вот так:

X++:
void groupRows()
{
    COM cmdBars, cmdBar, ctrls, ctrl;
    ;

    cmdBars = excel.CommandBars();
    cmdBar  = cmdBars.Item('PivotTable');
    ctrls   = cmdBar.Controls();
    ctrl    = ctrls.Item( 5 );
    ctrl.Execute();
}
Код из Ах3.0

P.S. естественно выполняется это на выделенном диапозоне (range.select), который был сгруппирован.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем

Последний раз редактировалось lev; 20.06.2012 в 15:06.
Старый 20.06.2012, 15:22   #3  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Player1 Посмотреть сообщение
линейка на диапазоне колонок появилась, но в раскрытом состоянии, а как в свернутом по-умолчанию сделать?
Выгрузка данных в Excel и их группировка... - здесь говорится о проблеме выполнения такого действия "в лоб"

Помогите сделать действие в Excel через COM - здесь ищутся пути решения
За это сообщение автора поблагодарили: Player1 (1).
Старый 22.06.2012, 06:57   #4  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
Цитата:
Сообщение от Gustav Посмотреть сообщение
Выгрузка данных в Excel и их группировка... - здесь говорится о проблеме выполнения такого действия "в лоб"

Помогите сделать действие в Excel через COM - здесь ищутся пути решения
Всё прочитал, весь день пробовал, так ничиго и не вышло.
Сталкнулся со всеми траблами которые возникали у kashperuk.
Региональные настройки - понял что мне нужно писать команды по-русски.
Код работает в job и не работает в class - да именно так.

Не стал бы заморачиваться, но отчет реально гигантский и архиважный). Быть может найдете время рассмотреть мою ситуацию
X++:
    COMExcelDocument_RU     excel;
    Com                     comRange, document, workSheets, exAppl, worksheet1;
;
        excel = new COMExcelDocument_RU();
        excel.newFile('', true);

    document    = excel.getComDocument();
    workSheets  = document.worksheets();
    exAppl      = document.Application();
    workSheet1  = workSheets.item(1);

    //группировка колонок 
    comRange = excel.findRange(ComExcelDocument_RU::numToNameCell(5, 0) + ":" +
                               ComExcelDocument_RU::numToNameCell(10, 0), 1);

    comRange.Group();
вот чем пользуемся в отчете, группировка появляется в раскрытом состоянии
X++:
.ExecuteExcel4Macro(strfmt('ПОКАЗАТЬ.ДЕТАЛИ(...
это уже никак не получается приделать
Старый 22.06.2012, 07:38   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Player1 Посмотреть сообщение
Код работает в job и не работает в class - да именно так.
Job всегда выполняется на клиенте, class - может и на сервере
Старый 22.06.2012, 22:53   #6  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Player1 Посмотреть сообщение
Всё прочитал, весь день пробовал, так ничиго и не вышло.
Сталкнулся со всеми траблами которые возникали у kashperuk.
Региональные настройки - понял что мне нужно писать команды по-русски.
Код работает в job и не работает в class - да именно так.

Не стал бы заморачиваться, но отчет реально гигантский и архиважный). Быть может найдете время рассмотреть мою ситуацию
Так, а вот то, что там в сообщении № 14 Помогите сделать действие в Excel через COM - про CommandBar "PivotTable" - совсем не подошло? Это - то же, о чем Вам lev уже говорил выше в текущей ветке. Неужели не работает? Оставьте пока ПОКАЗАТЬ.ДЕТАЛИ, попробуйте CommandBar!
Старый 25.06.2012, 10:29   #7  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
Попробовал, со строками все получается, а с колонками (интерпретировал код под свои переменные):
X++:
COMExcelDocument_RU     excel;    
    document    = excel.getComDocument();
    workSheets  = document.worksheets();
    exAppl      = document.Application();
    workSheet1  = workSheets.item(1);
    com    Columns, currColumns;
;
columns = workSheet1.columns();
    currColumns = COM::createFromVariant(columns.Item('A:C'));
    currColumns.Select();
    currColumns.Group();

    cmdBars = exAppl.CommandBars();
    cmdBar  = cmdBars.Item('PivotTable');
    ctrls   = cmdBar.Controls();
    ctrl    = ctrls.Item( 5 );
    ctrl.Execute();
отчет строится, линейка группировки присутствует в раскрытом виде, а вот выделены колонки не А:С, а все в которые выводились данные отчета (ну к примеру А:АС)
Старый 26.06.2012, 09:32   #8  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Player1 Посмотреть сообщение
отчет строится, линейка группировки присутствует в раскрытом виде, а вот выделены колонки не А:С, а все в которые выводились данные отчета (ну к примеру А:АС)
Следующий джоб у меня на Аксапте 3.0 и Excel 2003 отрабатывает как надо:
X++:
{
    COMExcelDocument_RU excel = new COMExcelDocument_RU();
    COM document;
    COM workSheets;
    COM exAppl;
    COM workSheet1;
    COM columns, currColumns, rng;
    COM cmdBars, cmdBar, ctrls, ctrl;
;
    excel.newFile('', true);

    document    = excel.getComDocument();
    workSheets  = document.worksheets();
    exAppl      = document.Application();
    workSheet1  = workSheets.item(1);

    columns = workSheet1.columns();
    currColumns = COM::createFromVariant(columns.Item('A:C'));
    currColumns.Select();
    currColumns.Group();

    cmdBars = exAppl.CommandBars();
    cmdBar  = cmdBars.Item('PivotTable');
    ctrls   = cmdBar.Controls();
    ctrl    = ctrls.Item( 5 );
    ctrl.Execute();

    rng = exAppl.Range('A1:AC10');
    rng.Value2('bla-bla-bla');
}
Старый 26.06.2012, 10:46   #9  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
В джобе да, в классе нет.
Ура! это натолкнуло меня на мысль что дальнейший код, после группировки, портит ее. Так и есть, вставил группировку в конце метода - работает. Ну только остался эффект того что все колонки отчета выделены после вывода его на экран, ну да ладно.
Старый 26.06.2012, 13:30   #10  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Player1 Посмотреть сообщение
только остался эффект того что все колонки отчета выделены после вывода его на экран
Ну так в самом конце сделать <любая одиночная ячейка>.Select():
X++:
    rng = exAppl.Range('A1');
    rng.Select();
За это сообщение автора поблагодарили: NoTimeToCry (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка времени выполнения в ComExcelDocument_RU.findRange() Toto DAX: Программирование 47 26.04.2018 10:45
Ошибка Terminal + ComExcelDocument_RU KingPeas DAX: Программирование 1 21.03.2012 13:53
Экспорт в Excel: ComExcelDocument_RU - нужно сделать серверным kair84 DAX: Программирование 26 26.05.2011 16:51
BookDataCalc_Sales_Ru, метод initOnPayment ошибка jonny DAX: Программирование 4 24.04.2011 16:52
Вопрос по классу SalesPurchReport_RU Кирилл DAX: Программирование 4 27.02.2004 13:28

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

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

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