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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.05.2009, 17:05   #1  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,340 / 3558 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
и еще мааленькое добавление.
В Аксапте еще с 3.0 есть очень хорошее семейство классов SysExcel*. Начинать следует с SysExcelApplication. Это семейство очень упрощает работу с Excel, особенно если требуется учесть разные версии, в отличие от ComExcelDocument_RU.
Конечно - это семейство далеко неполное и возможно его захочется расширить. Но у этого семейства классов есть пожалуй самый главный плюс - везде есть метод comObject - который всегда позволяет вернуться к COM-объектам и без лишнего модифицирования объектов - сделать свою задачу.
__________________
Возможно сделать все. Вопрос времени
Старый 22.05.2009, 18:22   #2  
zZ_TOP_Zz is offline
zZ_TOP_Zz
int 20h
Аватар для zZ_TOP_Zz
 
143 / 24 (1) +++
Регистрация: 26.02.2007
Адрес: Санкт -Петербург
to Gustav без обид:

Можно было конечно рассказать о существовании вывода в Ексель через механизмы прямого обращения через COM, используя операции с текстовым буфером и вставкой всех данных за раз, но за чем.

Ведь человек просто спросил как должен был выглядеть метод копирования колонок. Он не требовал механизма оптимизации и прочего чудо программирования где можно было безусловно раскрыть Ваши способности.(кои не раз спасали жизнь мне, скажу честно пользовался Вашими советами) но для примера и начала разбора с механизмами подойдет способ предложенный ice и простенький метод копирования. Далее он сам все найдет. Мы же не сразу со знаниями рождаемся, а приобретаем их по ходу жизни.

А вообще Вы как всегда правы в своем посте.
__________________
It's just my Unhopelessnessabilityerism
Trying to debug my mind
Старый 22.05.2009, 19:58   #3  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от zZ_TOP_Zz Посмотреть сообщение
to Gustav без обид:
Абсолютно. Я ж сразу предупредил - ничего личного. Мы просто делаем тихую революцию
Цитата:
Сообщение от zZ_TOP_Zz Посмотреть сообщение
Можно было конечно рассказать о существовании вывода в Ексель через механизмы прямого обращения через COM, используя операции с текстовым буфером и вставкой всех данных за раз, но за чем.
Вот это точно незачем, потому что вопрос был не про вывод, а про конкретную операцию уже внутри Excel. А что мы там делаем и как туда попали в задачке не говорится и не спрашивается.
Цитата:
Сообщение от zZ_TOP_Zz Посмотреть сообщение
скажу честно пользовался Вашими советами
Спасибо, очень приятно
Цитата:
Сообщение от zZ_TOP_Zz Посмотреть сообщение
но для примера и начала разбора с механизмами подойдет способ предложенный ice и простенький метод копирования.
Увы, он уже сразу не совсем простенький, потому что получен превращением кода макрорекордера, который операцию копирования (выделения типа Range.Select не учитываем) раскладывает на: копирование "от имени" range и последующую вставку от имени worksheet. К слову сказать, при выполнении Вашего метода еще, наверное, останется пунктирная рамка выделения, которую надо снимать операцией типа Application.CutCopyMode(false). Т.е. еще как минимум одна строка должна появиться.

Ну вот и смотрит человек и видит, аналогично как и в других методах этого класса, что чтобы выполнить простую операцию надо эвона сколько строк понаписать. Они все правильные - иначе ж бы не работало. Но они - лишние... Вот как уже достаточно (бог с ними пока с букмарками):
X++:
void copy(MSOfficeBookMark_RU bookMark1, MSOfficeBookMark_RU bookMark2, int _workSheet = 1)
{
    Com range1,range2;

    if (m_comDocument)
    {
        range1 = this.findRange(bookMark1, _workSheet);
        range2 = this.findRange(bookMark2, _workSheet);

        range1.copy(range2);
    }
}
А я предлагаю вот как (уже без букмарков и, заметьте, отпала необходимость в параметре worksheet, потому что range сам знает, с какого он worksheet'а и из какого он workbook'а):
X++:
void copy(COM range1, COM range2)
{
    if (m_comDocument)
    {
        range1.copy(range2);
    }
}
Ну и как-то уже и метод вроде не нужен в таком элементарном виде (но об этом я написал выше).
Цитата:
Сообщение от zZ_TOP_Zz Посмотреть сообщение
Далее он сам все найдет. Мы же не сразу со знаниями рождаемся, а приобретаем их по ходу жизни.
Иех, четвертый год я на форуме, время от времени возникаю с этой темой. А все равно, как ни вопрос по Excel, так очередной ответ с методом для ComExcelDocument_RU - и c теми же букмарками, с теми же проверками, с теми же findRange... А новичков учить-то, наверное, надо сразу правильно, чтобы потом мучительно не переучиваться.
Цитата:
Сообщение от zZ_TOP_Zz Посмотреть сообщение
А вообще Вы как всегда правы в своем посте.
Спасибо еще раз и простите, что еще раз тут повыступал.
За это сообщение автора поблагодарили: zZ_TOP_Zz (1).
Теги
columns, com connector, excel, колонки

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Копирование листа Excel целиком ax3.0 sp4 KR3 hlopez DAX: Программирование 1 20.04.2009 11:34
Копирование листов в Excel с шаблоном Zoe DAX: Программирование 8 20.11.2008 15:50
Копирование листов в Excel Андрей К. DAX: База знаний и проекты 12 30.08.2007 08:44
Вывод в Excel в формате XML и ширина колонок gl00mie DAX: Программирование 1 30.10.2006 10:45
Копирование из Грида в Excel ArturK DAX: Программирование 5 09.03.2004 19:55

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

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

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