| 
			
			 | 
		#1 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
			
			
			[Excel] - Несколько версий Excel на машине клиента
			 
			
			Добрый день. 
		
		
		
		
		
		
		
	У клиента на машине стоит одновременно несколько версий Excel. Задача: дать возможность пользователю указать, с какой именно Excel будет работать Аксапта. Вопрос: - как явно указать, с какой версией Excel должна работать Аксапта. Решение в лоб не сработало: X++: comApplication1 = new COM('Excel.Application.11'); comApplication2 = new COM('Excel.Application.12'); Причина такого поведения кроется в реестре: HKEY_CLASSES_ROOT\\Excel.Application.11 и HKEY_CLASSES_ROOT\\Excel.Application.12 имеют один и тот же CLSID. Похоже, что при установке новой версии Excel, инсталлятор заодно подправляет записи в реестре, относящиеся к предыдущей версии Excel. Можно ли этого избежать при установке? Можно ли в такой ситуации (когда две версии Excel уже установленны именно в таком виде) вызвать из Аксапты нужную версию Excel ?  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А если вместо new COM('Excel.Application.11') явно указать GUID класса (new COM('{00024500-0000-0000-C000-000000000046}'); )?
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Axapta v.3.0 sp5 kr2  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Gustav (3). | |
| 
			
			 | 
		#3 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да, как всё же некоторые вещи зашориваются постоянной однобокостью ('Excel.Application' да 'Excel.Application')...  
		
		
		
		
		
		
		
	Пока AndyD волшебного пендаля не даст, сам никогда лишний раз не пойдешь и не прочитаешь в хелпе, что... Цитата: 
	
		
			Remarks 
The class name of a COM object is either its ProgID (programmatic identifier) or CLSID (class identifier): ProgIDs have the following format: <program>.<component>.<version> (e.g. "AXAPI.Axapta.1 "). Note that the version element of the ProgID can often be omitted. CLSID s are 128 bit values and have to following format: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} (e.g. "{80F444A1-46FF-11D2-8459-0008C7A0D1EA}"). ![]() P.S. Андре, если не секрет, зачем это клиенту? Из-за миллиона строк, который позволяет 12 (но в то же время на большинстве машин, наверное, еще только 11)? Спасибо заранее, если ответите  
		 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: belugin (1). | |
| 
			
			 | 
		#4 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			А если вместо new COM('Excel.Application.11') явно указать GUID класса (new COM('{00024500-0000-0000-C000-000000000046}'); )?
		
	 
Сделал поиск строки 'Excel.Application.11' в ветви CLSID - нету. Хотя стоит, запускается и работает.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да, еще, в других местах реестра Excel встречается именно под этим CLSID. Хм... может они вообще не отличаются CLSID.Excel.11 и CLSID.Excel.12?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Андре, если не секрет, зачем это клиенту?
		
	 
2) Я поставил оба Excel и хочу иметь возможность тестировать работоспособность программы на обеих версиях Excel.  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
- вне Аксапты закрыть все текущие экземпляры Excel; - запустить вне Аксапты нужную версию Excel (в единственном экземпляре) - получить ссылку в Аксапте на этот экземпляр Excel при помощи COM::getObject('Excel.Application'); может, на что сгодится мыслишка?  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
			
			
			небольшой офф-топик про новости Excel 2007
			 
			
			Коль скоро тема балансирует между Excel.Application.11 и Excel.Application.12, или - более понятно - между Excel 2003 и Excel 2007, то показалось полезным привести попавшуюся по ходу ссылку на Возможности Office Excel 2007, не поддерживаемые в более ранних версиях Excel
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от Gustav
			 
 
			еще днем мне в голову "мозговым штурмом" приходила такая заднепроходная полуручная процедура: 
		
	- вне Аксапты закрыть все текущие экземпляры Excel; - запустить вне Аксапты нужную версию Excel (в единственном экземпляре) - получить ссылку в Аксапте на этот экземпляр Excel при помощи COM::getObject('Excel.Application'); может, на что сгодится мыслишка? Код: [HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}\LocalServer]
@="C:\\PROGRA~1\\MICROS~2\\OFFICE11\\EXCEL.EXE /automation"
"LocalServer"=hex(7):38,5d,67,41,56,6e,2d,7d,66,28,5a,58,66,65,41,52,36,2e,6a,\
  69,45,58,43,45,4c,46,69,6c,65,73,3e,21,44,65,40,5d,56,7a,28,72,3d,66,60,31,\
  6c,66,71,60,3f,52,26,20,2f,61,75,74,6f,6d,61,74,69,6f,6e,00,00 | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Насколько я понимаю, Excel не поддерживает версионность COM-интерфейса. Т.е. чтобы физически была возможность запустить разные версии Excel через COM-интерфейс в реестре должны быть разные CLSID для разных версий. Но реально CLSID одинаковый для любой версии Excel. Вопрос только в том, что именно он запускает. 
		
		
		
		
		
		
		
	Это значит, что чтобы сделать возможность выбора версии Excel через COM-интерфейс надо иметь возможность напрямую править сам реестр. Изменить настройки (привязку) CLSID к конкретной версии Excel. Не думаю, что в этом есть смысл. Ведь если официально прописано о поддержке определенной версии Excel, то установка другой версии - это риск самого пользователя. Кроме того, конечно, некоторые свойства и методы COM-интерфейса в разных версиях меняются, но в основном, все остается без изменений. Так что, думаю, не должно быть особых проблем при работе со старшей версией, кроме некоторых специфических ситуаций. Да, проверить какую же версию Excel подхватил COM-интерфейс можно через свойство version() X++: Com excel; ; excel = new Com("Excel.Application"); info(strFmt("%1",excel.version()));  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Андре (5), aidsua (1). | |
| 
			
			 | 
		#11 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			INFO: Автоматизация Office в системе, где установлено несколько версий пакета MS Office: 
		
		
		
		
		
		
		
	Цитата: 
	
		
			Бытует мнение, что при автоматизации Office в системе, где установлены пакеты несколько версий Office, можно указать загружаемую версию приложения с помощью программного идентификатора PROGID, который уникален для каждой версии продукта (например, для загрузки Excel 2000 служит идентификатор Excel.Application.9, Excel 2002 соответствует Excel.Application.10, а Office Excel 2003 — Excel.Application.11). В действительности это не так. Для Excel 2000, 2002 и 2003 используется один и тот же идентификатор класса (CLSID), а это значит, что версия приложения, загружаемая с одним из программных идентификаторов (PROGID), определяется только порядком установки версий программы.
		
	 
 
		 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: vladz (1). | |
| 
			
			 | 
		#12 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Владимир Максимов, 
		
		
		
		
		
		
		
	Цитата: 
	
		
			Насколько я понимаю, Excel не поддерживает версионность COM-интерфейса.
		
	 
 | 
| 
	
 | 
| Теги | 
| excel | 
| 
	
	 | 
	
		
  |