|  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-интерфейса.  А в стандартном классе ComExcelDocument_RU какой? | 
|  | 
|  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. | 
|  |