| 
			
			 | 
		#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-интерфейса. 
		
	  А в стандартном классе ComExcelDocument_RU какой?
		 | 
| 
	
 | 
| 
			
			 | 
		#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, нагрузили его функционалом, которого нет в эксельном аналоге (неужели чего-то и вправду не хватает?   ) - пришёл прогер VBA и растерялся, потому что ему будет непривычно ощущать функционал, который он не ожидает увидеть у этого объекта...ИМХО, не переписываете ли Вы Excel?  
		 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Developer 
		
			
	 | 
	
	
	
		
		
		
		 
			
			ну смысл в том, что каждый прогер хочет развиваться, я так думаю. 
		
		
		
		
		
		
			
		
		
		
		
		
			В общем, привыкнет он и к новым функциям и к недостатку "нескольких точек" (проблема позднего связывания). Смысл в том, чтобы не переписывать сам код (например, генератора отчетов) из-за модификации внутренней логики моих классов, а дополнять его, в связи с появлением новых функций (Обратная совместимость  , однако). То бишь - это подход такой (паттерн, мона сказать).Цитата: 
	
		
			ИМХО, не переписываете ли Вы Excel?
		
	 
![]() Если был предложен такой паттерн, это не значит, что я навязываю подход "напихай в класс, все что вздумается" (в нем кстати нет функционала, который не использовал бы COM-интерфейсы Excel). Можно форматировать контент до вставки в Excel (в HTML, XML форматах). Как говорится, что кому ближе. Последний раз редактировалось Jox; 06.06.2006 в 13:44.  | 
| 
	
 |