|
![]() |
#1 |
Developer
|
Пример работы с Excel через COM
Добрый день, коллеги!
Выкладываю Вашему вниманию, проект работы Axapta с Excel. Основа написана с использованием чистого COM-интерфейса. Я создал для аналогии с VBA классы, соответствующие объектам Application, WorkBook, WorkSheet и Range. При таком подходе их можно просто дополнять по мере надобности не меняя основную логику функционала, плюс, для прогеров, которые работали с VBA, будет проще их понять. Функционал буду совершенствовать, пересмотрю связь между классами, в общем постараюсь свести все к программированию отчетов с минимальным кол-вом кода. Но для ускорения вывода строк рекомендую использовать вставку контента через буфер обмена в html-формате с испольованием TextBuffer(); получается очень быстро. Имеет смысл вставлять все строки разом ![]() А также, можно подкрячить классы под DDE. Надеюсь моя работа кому-нибудь поможет ;-) Последний раз редактировалось Jox; 05.06.2006 в 10:58. |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
![]() |
#2 |
Moderator
|
Цитата:
Сообщение от Jox
Основа написана с использованием чистого COM-интерфейса.
![]() |
|
![]() |
#3 |
Developer
|
![]()
Это всего лишь игра слов, не более
![]() А на самом деле, этим я хотел сказать, что в классе отстутствуют такие приемы, как вставка через буфер форматированного контента и пр. |
|
![]() |
#4 |
Developer
|
А что касается ComExcelDocument_RU, дык тут сравнивать даж нечего, т.к. я ставил перед собой идею:
Цитата:
...для аналогии с VBA классы, соответствующие объектам Application, WorkBook, WorkSheet и Range. При таком подходе их можно просто дополнять по мере надобности не меняя основную логику функционала...
|
|
![]() |
#5 |
Moderator
|
Цитата:
Сообщение от Jox
для аналогии с VBA классы, соответствующие объектам Application, WorkBook, WorkSheet и Range. При таком подходе их можно просто дополнять по мере надобности не меняя основную логику функционала, плюс, для прогеров, которые работали с VBA, будет проще их понять.
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, нагрузили его функционалом, которого нет в эксельном аналоге (неужели чего-то и вправду не хватает? ![]() ИМХО, не переписываете ли Вы Excel? ![]() |
|
![]() |
#6 |
Developer
|
ну смысл в том, что каждый прогер хочет развиваться, я так думаю.
В общем, привыкнет он и к новым функциям и к недостатку "нескольких точек" (проблема позднего связывания). Смысл в том, чтобы не переписывать сам код (например, генератора отчетов) из-за модификации внутренней логики моих классов, а дополнять его, в связи с появлением новых функций (Обратная совместимость ![]() Цитата:
ИМХО, не переписываете ли Вы Excel?
![]() Если был предложен такой паттерн, это не значит, что я навязываю подход "напихай в класс, все что вздумается" (в нем кстати нет функционала, который не использовал бы COM-интерфейсы Excel). Можно форматировать контент до вставки в Excel (в HTML, XML форматах). Как говорится, что кому ближе. Последний раз редактировалось Jox; 06.06.2006 в 13:44. |
|