|  22.08.2011, 11:04 | #1 | 
| Участник | проблема использования Excel через clr 
			
			Доброго времени суток! Возникла проблема вызова объектов Excel, используя объекты clr. Пример кода был взят из ветки форума. Ссылка. И написан джобик (просто открываем, а затем пересохраняем файл): X++: static void test_clr_excel(Args _args) { Microsoft.Office.Interop.Excel._Application excel; Microsoft.Office.Interop.Excel.Workbooks workbooks; Microsoft.Office.Interop.Excel._Workbook workbook; System.Type type; System.Reflection.FieldInfo fieldInfo; System.Object missing; Microsoft.Office.Interop.Excel.XlFileFormat fileFormat; Microsoft.Office.Interop.Excel.XlSaveAsAccessMode saveAsAccessMode; FileName textFileName; FileName path; FileName name; FileName extention; FileName _excelFileName = "С:\\test.xls"; ; new InteropPermission(InteropKind::ClrInterop).assert(); [path, name, extention] = fileNameSplit(_excelFileName); textFileName = path + name + '.csv'; if (System.IO.File::Exists(textFileName)) System.IO.File::Delete(textFileName); type = System.Type::GetType('System.Reflection.Missing'); fieldInfo = type.GetField('Value'); missing = fieldInfo.GetValue(null); fileFormat = ClrInterop::parseClrEnum('Microsoft.Office.Interop.Excel.XlFileFormat', 'xlTextWindows'); saveAsAccessMode = ClrInterop::parseClrEnum('Microsoft.Office.Interop.Excel.XlSaveAsAccessMode', 'xlNoChange'); try { excel = new Microsoft.Office.Interop.Excel.ApplicationClass(); workbooks = excel.get_Workbooks(); // при попытке открыть файл объект Excel просто вылетает workbook = workbooks._Open(_excelFileName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing); workbook.SaveAs(textFileName, fileFormat, missing, missing, missing, missing, saveAsAccessMode, missing, missing, missing, missing, missing); } catch { info("catched"); } try { // также не удаётся закрыть объект workbooks.Close(); } catch { info("excel wasnt closed"); } CodeAccessPermission::revertAssert(); } Система: Win Srv 2008 R2, DAX 2009, Excel 2010 Возможно кто-то уже сталкивался с аналогичной проблемой. Возможно, что будет необходимо "подкрутить" какие-либо настройки системы. | 
|  | 
|  22.08.2011, 14:52 | #2 | 
| Участник | 
			
			Сразу после создания экземпляра Excel в целях тестирования сделайте его видимым X++: excel = new Microsoft.Office.Interop.Excel.ApplicationClass(); excel.set_Visible(true); Как правило, проблема в сообщении об ошибке в Excel, которое требует нажать "Ok" для продолжения процесса открытия файла. Визуализация экземпляра Excel поможет убедится в правильности данного предположения | 
|  | 
|  22.08.2011, 15:12 | #3 | 
| Участник | 
			
			Добавил, но результата так и не получил. Соответственно стало: X++: excel = new Microsoft.Office.Interop.Excel.ApplicationClass(); excel.set_Visible(true); // отображается Excel workbooks = excel.get_Workbooks(); // при попытке открыть файл объект Excel просто вылетает workbook = workbooks._Open(_excelFileName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing); | 
|  | 
|  22.08.2011, 15:35 | #4 | 
| Участник | 
			
			Так что происходит с Excel? Он "вылетает" или "остается висеть"? По шагам тестировать не пробовали?
		 | 
|  | 
|  22.08.2011, 16:11 | #5 | 
| Участник | Цитата: 
		
			Сообщение от Batuev Artem
			   Доброго времени суток! Возникла проблема вызова объектов Excel, используя объекты clr. Пример кода был взят из ветки форума. [/XPP] При попытке открыть файл, Excel просто вылетает, не возвращая никакой ошибки. Тем не менее сам процесс остается висеть в менеджере задач. Система: Win Srv 2008 R2, DAX 2009, Excel 2010 Возможно кто-то уже сталкивался с аналогичной проблемой. Возможно, что будет необходимо "подкрутить" какие-либо настройки системы. Посмотрите тут Падает Ахапта-2009 при использовании .NET/CLRInterop/Word Видимо причина та же... | 
|  | 
|  22.08.2011, 16:13 | #6 | 
| Участник | 
			
			А вызов происходит с терминального сервера? Уже на форуме обсуждалось, что при работе с Excel через терминальный сервер, возникают проблемы с методами СОМ объектов... Ошибки Word 2003 при работе в терминальном режиме 
				__________________ http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! Последний раз редактировалось plumbum; 22.08.2011 в 16:15. Причина: ссылка на упомянутую ветку | 
|  | 
|  22.08.2011, 17:46 | #7 | 
| Участник | 
			
			да, по шагам пробовал тестировать. При вызове workbooks._Open(...) Excel вылетает (на сколько я понимаю, при вызове clr объекта происходит какая-то ошибка или исключение, но в Аксапту обратно оно (оповещение об ошибке) не попадает), но процесс (а если вызвать заранее excel.set_Visible(true), то и визуально окно Excel) остается висеть в менеджере задач.
		 | 
|  | 
|  22.08.2011, 17:58 | #8 | 
| Участник | |
|  | 
|  22.08.2011, 18:01 | #9 | 
| Участник | Цитата: 
		
			Сообщение от plumbum
			   А вызов происходит с терминального сервера? Уже на форуме обсуждалось, что при работе с Excel через терминальный сервер, возникают проблемы с методами СОМ объектов... Ошибки Word 2003 при работе в терминальном режиме | 
|  |