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