12.10.2013, 22:27 | #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). |
13.10.2013, 13:22 | #22 |
Участник
|
См. также данное сообщение в этой же теме.
|
|
13.10.2013, 16:26 | #23 |
Участник
|
Вопрос можно ли на сервере (windows 2008 R2) сделать доступной сборку Microsoft.Office.Interop.Excel без установки офиса?
|
|
13.10.2013, 22:16 | #24 |
Administrator
|
Вопрос чайника - если один файл "выдрать" из системы, где офис установлен и положить его в GAC на нужный сервер - это спасет? Положить в GAC = скопировать в C:\Windows\assembly средствами проводника Windows.
Сразу оговорюсь - не пробовал - просто спросил
__________________
Возможно сделать все. Вопрос времени |
|
13.10.2013, 23:12 | #25 |
Участник
|
Классы из пространства имён Microsoft.Office.Interop.Excel - всего лишь обертки для COM-объектов Excel, поэтому сделать доступной сборку можно, но правильный вопрос - можно ли сделать доступным сам Excel без установки офиса. Наверно, извратиться как-то можно, но стоит ли оно того?
|
|
|
За это сообщение автора поблагодарили: sukhanchik (2). |
13.10.2013, 23:25 | #26 |
Участник
|
Без установки офиса поработать с Microsoft.Office.Interop.Excel не получится, насколько я понимаю, это всего лишь сборка из классов оберток.
Но мысль интересная, особенно если почитать на форуме сообщения об обнаруженных недокументированных особенностях в работе... Думаю посмотреть в сторону Open XML SDK или сборок-надстроек над ним типа: http://closedxml.codeplex.com/ или http://simpleooxml.codeplex.com/... |
|
|
За это сообщение автора поблагодарили: sukhanchik (2). |
14.10.2013, 06:49 | #27 |
Участник
|
Первым же делом проверил этот факт, поэтому и задал вопрос То есть Reference добавить получается, а вот в коде не видит
|
|
14.10.2013, 06:51 | #28 |
Участник
|
Находил еще такую информацию, что можно установить Microsoft Office 2010(2007): Primary Interop Assemblies и все будет, но похоже без самого офиса он бесмыслен
|
|
14.10.2013, 06:54 | #29 |
Участник
|
Цитата:
Сообщение от gl00mie
Классы из пространства имён Microsoft.Office.Interop.Excel - всего лишь обертки для COM-объектов Excel, поэтому сделать доступной сборку можно, но правильный вопрос - можно ли сделать доступным сам Excel без установки офиса. Наверно, извратиться как-то можно, но стоит ли оно того?
В нашем случае, это нужно, чтобы ошибок компиляции не возникала при ежедневной компиляции. |
|
21.01.2014, 21:23 | #30 |
Участник
|
Если весь array состоит из System.String, то всё получается корректно. А если в некоторых ячейках числа (переведённые в строковый вид), то они потом экселем всё равно воспринимаются как строки Даже если при этом используется шаблон xlt, в котором у этой ячейки стоит формат данных числовой.
Числа нужно вставлять отдельным массивом с числовым типом ?
__________________
Дмитрий |
|
23.01.2014, 10:28 | #31 |
Участник
|
С работой метода Application.Union так и не разобрались ?
Я тут решил воспользоваться методом Range.TextToColumns. Он тоже не работает
__________________
Дмитрий |
|
01.04.2014, 18:59 | #32 |
Участник
|
а в 2012 в CIL эти классы могут работать?
пока падает с такой ошибкой: X++: : SysExcelApplication_NET.new, CIL . |
|
02.04.2014, 13:03 | #33 |
Участник
|
Я недавно задействовал эти классы на 2012-й, поменял пару-тройку мест в коде, к которым с подозрением отнесся компилятор (вроде замены SysDictClass::is() на is и приведения anytype к Object перед использованием его в контексте, где предполагается ссылочный тип данных) - все работает, косяки работы с Excel через COM, которые полезли и в 2012-й, задушены на корню.
Ах, да: чтобы все это хозяйство работало в CIL, разумеется, надо перебить свойство RunOn у классов SysExcel*, потому что по умолчанию они все выполняются на клиенте. Последний раз редактировалось gl00mie; 02.04.2014 в 13:06. |
|
02.04.2014, 13:06 | #34 |
Участник
|
Цитата:
Сообщение от gl00mie
Я недавно задействовал эти классы на 2012-й, поменял пару-тройку мест в коде, к которым с подозрением отнесся компилятор (вроде замены SysDictClass::is() на is и приведения anytype к Object перед использованием его в контексте, где предполагается ссылочный тип данных) - все работает, косяки работы с Excel через COM, которые полезли и в 2012-й, задушены на корню.
Ах, да: чтобы все это хозяйство работало в CIL, разумеется, надо перебить свойство RunOn у родительских классов SysExcel*, потому что по умолчанию они все выполняются на клиенте. |
|
02.04.2014, 13:21 | #35 |
Участник
|
Нет, до Union, к сожалению, руки не дошли - по правде сказать, я даже не проверял этот момент. У меня пока более приземленные интересы: чтобы импорт из Excel работал и не падал от любого чиха. К слову, в 2012-й выкинули импорт данных из "традиционных" шаблонов Excel, создаваемых мастером (в частности, классов SysDataExcelCOMWizard и SysDataExcelCOMPreview больше нет в стандартном приложении), а объединение ячеек штатно использовалось вроде только в сопутствующем классе SysDataExcelCOM, так что... решение проблемы актуально теперь лишь в случае, если объединение ячеек используется в каких-либо модификациях.
PS. Занятно, что сам класс SysDataExcelCOM в 2012-й остался - видимо, на случай, если он используется в каких-либо модификациях, поднимаемых с предыдущих версий. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
24.04.2014, 14:33 | #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. |
|
24.04.2014, 20:53 | #37 |
Участник
|
если посмотреть, в каком контексте она упоминается, то станет ясно, что она не нужна - ее упоминание можно смело выкинуть. Про нее "знает" класс, который должен для записей некоторых таблиц возвращать более-менее вразумительные описания, но если про какие-то таблицы он знать не будет, на импорте из Excel это никак не скажется
|
|
25.04.2014, 09:30 | #38 |
Участник
|
Из-за её отсутствия у меня не компилируется класс DEV_Desc4, так как у него в методе getListOfFieldIds4Desc вот такой вот код
X++: case tablenum(DEV_SysReleaseUpdateScriptsRef) : ret.addEnd( fieldnum(DEV_SysReleaseUpdateScriptsRef, ClassId) ); ret.addEnd( fieldnum(DEV_SysReleaseUpdateScriptsRef, Method) ); break; |
|
25.04.2014, 09:49 | #39 |
Участник
|
Да-да, см. мое сообщение выше
|
|
05.12.2014, 11:01 | #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, законченный пример, полезное |
|
|