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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.06.2006, 10:46   #1  
Jox is offline
Jox
Developer
Аватар для Jox
 
112 / 24 (1) +++
Регистрация: 26.07.2005
Адрес: Питер
Пример работы с Excel через COM
Добрый день, коллеги!

Выкладываю Вашему вниманию, проект работы Axapta с Excel.
Основа написана с использованием чистого COM-интерфейса.
Я создал для аналогии с VBA классы, соответствующие объектам Application, WorkBook, WorkSheet и Range. При таком подходе их можно просто дополнять по мере надобности не меняя основную логику функционала, плюс, для прогеров, которые работали с VBA, будет проще их понять. Функционал буду совершенствовать, пересмотрю связь между классами, в общем постараюсь свести все к программированию отчетов с минимальным кол-вом кода.

Но для ускорения вывода строк рекомендую использовать вставку контента через буфер обмена в html-формате с испольованием TextBuffer(); получается очень быстро.
Имеет смысл вставлять все строки разом
А также, можно подкрячить классы под DDE.

Надеюсь моя работа кому-нибудь поможет ;-)
Вложения
Тип файла: xpo IntExcel.xpo (45.5 Кб, 437 просмотров)

Последний раз редактировалось Jox; 05.06.2006 в 10:58.
За это сообщение автора поблагодарили: mazzy (5).
Старый 06.06.2006, 10:20   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Jox
Основа написана с использованием чистого COM-интерфейса.
Извиняюсь, это что означает? А бывает "нечистый"? А в стандартном классе ComExcelDocument_RU какой?
Старый 06.06.2006, 11:38   #3  
Jox is offline
Jox
Developer
Аватар для Jox
 
112 / 24 (1) +++
Регистрация: 26.07.2005
Адрес: Питер
;)
Это всего лишь игра слов, не более )
А на самом деле, этим я хотел сказать, что в классе отстутствуют такие приемы, как вставка через буфер форматированного контента и пр.
Старый 06.06.2006, 11:42   #4  
Jox is offline
Jox
Developer
Аватар для Jox
 
112 / 24 (1) +++
Регистрация: 26.07.2005
Адрес: Питер
А что касается ComExcelDocument_RU, дык тут сравнивать даж нечего, т.к. я ставил перед собой идею:
Цитата:
...для аналогии с VBA классы, соответствующие объектам Application, WorkBook, WorkSheet и Range. При таком подходе их можно просто дополнять по мере надобности не меняя основную логику функционала...
в отличие от ComExcelDocument_RU.
Старый 06.06.2006, 12:26   #5  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Jox
для аналогии с VBA классы, соответствующие объектам Application, WorkBook, WorkSheet и Range. При таком подходе их можно просто дополнять по мере надобности не меняя основную логику функционала, плюс, для прогеров, которые работали с VBA, будет проще их понять.
А зачем? Эти же объекты и так вроде на виду, если через COM...

COM xlApp; // Excel.Application
COM wbks, wbk; // Workbooks, Workbook
COM wkss, wks; // Worksheets, Worksheet
COM rng; // Range
...........................
xlApp = new COM("Excel.Application");
wbks = xlApp.Workbooks();
wbk = wbks.Add();
wkss = wbk.Worksheets();
wks = wkss.Item(1);
rng = wks.Range("E6");
rng.Value2(123);
xlApp.Visible(true);

Да, безусловно неудобно, что нельзя писать через несколько точек типа xlApp.Workbooks(1).Worksheets(1).Range("E6"), но в принципе привыкаешь. Зато родные эксельные объекты выглядят вполне прозрачно... Ну, создали Вы свой оригинальный Worksheet, нагрузили его функционалом, которого нет в эксельном аналоге (неужели чего-то и вправду не хватает? ) - пришёл прогер VBA и растерялся, потому что ему будет непривычно ощущать функционал, который он не ожидает увидеть у этого объекта...

ИМХО, не переписываете ли Вы Excel?
Старый 06.06.2006, 13:36   #6  
Jox is offline
Jox
Developer
Аватар для Jox
 
112 / 24 (1) +++
Регистрация: 26.07.2005
Адрес: Питер
ну смысл в том, что каждый прогер хочет развиваться, я так думаю.
В общем, привыкнет он и к новым функциям и к недостатку "нескольких точек" (проблема позднего связывания).
Смысл в том, чтобы не переписывать сам код (например, генератора отчетов) из-за модификации внутренней логики моих классов, а дополнять его, в связи с появлением новых функций (Обратная совместимость , однако). То бишь - это подход такой (паттерн, мона сказать).
Цитата:
ИМХО, не переписываете ли Вы Excel?
Использование COM-интерфейсов - это не переписывание COM-серверов
Если был предложен такой паттерн, это не значит, что я навязываю подход "напихай в класс, все что вздумается" (в нем кстати нет функционала, который не использовал бы COM-интерфейсы Excel). Можно форматировать контент до вставки в Excel (в HTML, XML форматах). Как говорится, что кому ближе.

Последний раз редактировалось Jox; 06.06.2006 в 13:44.
Теги
excel, законченный пример

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Построчный импорт из Excel через COM olesh DAX: Программирование 20 23.10.2008 14:01
Помогите сделать действие в Excel через COM kashperuk DAX: Программирование 25 10.09.2007 15:59
SQL запрос через COM вызовы Акзапты 4 Jab Straight DAX: Программирование 3 14.06.2007 17:08
отчет в Excel через COM Pawlik DAX: Программирование 2 23.03.2006 15:44
Порты для работы через Интернет KiselevSA DAX: Администрирование 8 03.04.2002 15:15
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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