| 
			
			 | 
		#21 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Еще обнаружилась проблема. При выгрузке отчетов через SysExcelApplication_net и закрытии файла в диспетчере задач продолжает висеть процесс. 
		
		
		
		
		
		
		
	Решение данной проблемы я находил на разных форумах и основной мыслью было вызов X++: System.GC::Collect(); System.GC::WaitForPendingFinalizers(); Решение Все используемые переменные классов SysExcel*_Net должно быть аннулированы (присвоить null, в том числе и переменной приложения). Без этого вторая часть может не отработать. После этого нужно запустить метод чистки "мусора "(аналог метода quit в классе SysExcelApplication_net ). Его я разместил в классе приложения. X++: static void finalizeProcess() { ; new InteropPermission(InteropKind::ClrInterop).assert(); System.GC::Collect(); System.GC::WaitForPendingFinalizers(); CodeAccessPermission::revertAssert(); } Надеюсь, что данные опыт кому-нибудь поможет.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: alex55 (1). | |
| 
			
			 | 
		#22 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			См. также данное сообщение в этой же теме.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#23 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вопрос можно ли на сервере (windows 2008 R2) сделать доступной сборку Microsoft.Office.Interop.Excel без установки офиса?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#24 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вопрос чайника - если один файл "выдрать" из системы, где офис установлен и положить его в GAC на нужный сервер - это спасет? Положить в GAC = скопировать в C:\Windows\assembly средствами проводника Windows. 
		
		
		
		
		
		
			Сразу оговорюсь - не пробовал - просто спросил  
		
				__________________ 
		
		
		
		
	Возможно сделать все. Вопрос времени  | 
| 
	
 | 
| 
			
			 | 
		#25 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Классы из пространства имён Microsoft.Office.Interop.Excel - всего лишь обертки для COM-объектов Excel, поэтому сделать доступной сборку можно, но правильный вопрос - можно ли сделать доступным сам Excel без установки офиса. Наверно, извратиться как-то можно, но стоит ли оно того?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: sukhanchik (2). | |
| 
			
			 | 
		#26 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Без установки офиса поработать с Microsoft.Office.Interop.Excel не получится, насколько я понимаю, это всего лишь сборка из классов оберток. 
		
		
		
		
		
		
		
	Но мысль интересная, особенно если почитать на форуме сообщения об обнаруженных недокументированных особенностях в работе... Думаю посмотреть в сторону Open XML SDK или сборок-надстроек над ним типа: http://closedxml.codeplex.com/ или http://simpleooxml.codeplex.com/...  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: sukhanchik (2). | |
| 
			
			 | 
		#27 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
  То есть Reference добавить получается, а вот в коде не видит 
		 | 
| 
	
 | 
| 
			
			 | 
		#28 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Находил еще такую информацию, что можно установить Microsoft Office 2010(2007): Primary Interop Assemblies и все будет, но похоже без самого офиса он бесмыслен 
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#29 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от gl00mie
			 
 
			Классы из пространства имён Microsoft.Office.Interop.Excel - всего лишь обертки для COM-объектов Excel, поэтому сделать доступной сборку можно, но правильный вопрос - можно ли сделать доступным сам Excel без установки офиса. Наверно, извратиться как-то можно, но стоит ли оно того? 
		
	В нашем случае, это нужно, чтобы ошибок компиляции не возникала при ежедневной компиляции.  | 
| 
	
 | 
| 
			
			 | 
		#30 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Если весь array состоит из System.String, то всё получается корректно. А если в некоторых ячейках числа (переведённые в строковый вид), то они потом экселем всё равно воспринимаются как строки  
		
		
		
		
		
		
			   Даже если при этом используется шаблон xlt, в котором у этой ячейки стоит формат данных числовой.Числа нужно вставлять отдельным массивом с числовым типом ? 
				__________________ 
		
		
		
		
	Дмитрий  | 
| 
	
 | 
| 
			
			 | 
		#31 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			С работой метода Application.Union так и не разобрались ?  
		
		
		
		
		
		
			Я тут решил воспользоваться методом Range.TextToColumns. Он тоже не работает  
		
				__________________ 
		
		
		
		
	Дмитрий  | 
| 
	
 | 
| 
			
			 | 
		#32 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			а в 2012 в CIL эти классы могут работать? 
		
		
		
		
		
		
		
	пока падает с такой ошибкой: X++:  :    SysExcelApplication_NET.new,   CIL  . | 
| 
	
 | 
| 
			
			 | 
		#33 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Я недавно задействовал эти классы на 2012-й, поменял пару-тройку мест в коде, к которым с подозрением отнесся компилятор (вроде замены SysDictClass::is() на is и приведения anytype к Object перед использованием его в контексте, где предполагается ссылочный тип данных) - все работает, косяки работы с Excel через COM, которые полезли и в 2012-й, задушены на корню. 
		
		
		
		
		
		
		
		
			Ах, да: чтобы все это хозяйство работало в CIL, разумеется, надо перебить свойство RunOn у классов SysExcel*, потому что по умолчанию они все выполняются на клиенте. Последний раз редактировалось gl00mie; 02.04.2014 в 13:06.  | 
| 
	
 | 
| 
			
			 | 
		#34 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от gl00mie
			 
 
			Я недавно задействовал эти классы на 2012-й, поменял пару-тройку мест в коде, к которым с подозрением отнесся компилятор (вроде замены SysDictClass::is() на is и приведения anytype к Object перед использованием его в контексте, где предполагается ссылочный тип данных) - все работает, косяки работы с Excel через COM, которые полезли и в 2012-й, задушены на корню. 
		
	Ах, да: чтобы все это хозяйство работало в CIL, разумеется, надо перебить свойство RunOn у родительских классов SysExcel*, потому что по умолчанию они все выполняются на клиенте.  | 
| 
	
 | 
| 
			
			 | 
		#35 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Нет, до Union, к сожалению, руки не дошли - по правде сказать, я даже не проверял этот момент. У меня пока более приземленные интересы: чтобы импорт из Excel работал и не падал от любого чиха. К слову, в 2012-й выкинули импорт данных из "традиционных" шаблонов Excel, создаваемых мастером (в частности, классов SysDataExcelCOMWizard и SysDataExcelCOMPreview больше нет в стандартном приложении), а объединение ячеек штатно использовалось вроде только в сопутствующем классе SysDataExcelCOM, так что... решение проблемы актуально теперь лишь в случае, если объединение ячеек используется в каких-либо модификациях. 
		
		
		
		
		
		
		
	PS. Занятно, что сам класс SysDataExcelCOM в 2012-й остался - видимо, на случай, если он используется в каких-либо модификациях, поднимаемых с предыдущих версий.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Logger (3). | |
| 
			
			 | 
		#36 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			SysExcel_via_NET.rar 
		
		
		
		
		
		
		
		
			Поставил проект из архива, при компиляции возникли ошибки. DEV_AnyTypeUtil не является классом. DEV_ValueTypeConversionFlags на вот это ругается Класс Microsoft.Office.Interop.Excel.ListObject не содержит эту функцию. Класс Microsoft.Office.Interop.Excel.FormatConditions не содержит эту функцию. Кто может помогите проектиком с DEV_*. DEV_AnyTypeUtil и DEV_ValueTypeConversionFlags нашел. Теперь нужна таблица DEV_SysReleaseUpdateScriptsRef. Последний раз редактировалось smailik; 24.04.2014 в 14:40.  | 
| 
	
 | 
| 
			
			 | 
		#37 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			если посмотреть, в каком контексте она упоминается, то станет ясно, что она не нужна - ее упоминание можно смело выкинуть. Про нее "знает" класс, который должен для записей некоторых таблиц возвращать более-менее вразумительные описания, но если про какие-то таблицы он знать не будет, на импорте из Excel это никак не скажется  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#38 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Из-за её отсутствия у меня не компилируется класс DEV_Desc4, так как у него в методе getListOfFieldIds4Desc вот такой вот код 
		
		
		
		
		
		
		
	X++: case tablenum(DEV_SysReleaseUpdateScriptsRef) : ret.addEnd( fieldnum(DEV_SysReleaseUpdateScriptsRef, ClassId) ); ret.addEnd( fieldnum(DEV_SysReleaseUpdateScriptsRef, Method) ); break;  | 
| 
	
 | 
| 
			
			 | 
		#39 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да-да, см. мое сообщение выше  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#40 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			При использовании Excel в пакетном режиме у меня процесс excel.exe остаётся в памяти, не удаляется. Причём при последующих запусках пакетного задания второй процесс появляется и затем удаляется, а первый так и остаётся висеть. У вас также ? 
		
		
		
		
		
		
			Windows 2012R2, Ax 2012 R3, Office 2013 X++: workbook = null; workbooks = null; excel = null; System.GC::Collect(); System.GC::WaitForPendingFinalizers(); 
				__________________ 
		
		
		
		
	Дмитрий  | 
| 
	
 | 
| Теги | 
| .net, ax2009, excel, законченный пример, полезное | 
| 
	
	 | 
	
		
		
  |