AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.10.2013, 22:27   #21  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Еще обнаружилась проблема. При выгрузке отчетов через 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  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
См. также данное сообщение в этой же теме.
Старый 13.10.2013, 16:26   #23  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Вопрос можно ли на сервере (windows 2008 R2) сделать доступной сборку Microsoft.Office.Interop.Excel без установки офиса?
Старый 13.10.2013, 22:16   #24  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,308 / 3540 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Вопрос чайника - если один файл "выдрать" из системы, где офис установлен и положить его в GAC на нужный сервер - это спасет? Положить в GAC = скопировать в C:\Windows\assembly средствами проводника Windows.

Сразу оговорюсь - не пробовал - просто спросил
__________________
Возможно сделать все. Вопрос времени
Старый 13.10.2013, 23:12   #25  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Классы из пространства имён Microsoft.Office.Interop.Excel - всего лишь обертки для COM-объектов Excel, поэтому сделать доступной сборку можно, но правильный вопрос - можно ли сделать доступным сам Excel без установки офиса. Наверно, извратиться как-то можно, но стоит ли оно того?
За это сообщение автора поблагодарили: sukhanchik (2).
Старый 13.10.2013, 23:25   #26  
handy-comp is offline
handy-comp
Участник
 
96 / 78 (3) ++++
Регистрация: 27.09.2012
Без установки офиса поработать с Microsoft.Office.Interop.Excel не получится, насколько я понимаю, это всего лишь сборка из классов оберток.
Но мысль интересная, особенно если почитать на форуме сообщения об обнаруженных недокументированных особенностях в работе...
Думаю посмотреть в сторону Open XML SDK или сборок-надстроек над ним
типа: http://closedxml.codeplex.com/ или http://simpleooxml.codeplex.com/...
За это сообщение автора поблагодарили: sukhanchik (2).
Старый 14.10.2013, 06:49   #27  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Вопрос чайника - если один файл "выдрать" из системы, где офис установлен и положить его в GAC на нужный сервер - это спасет? Положить в GAC = скопировать в C:\Windows\assembly средствами проводника Windows.
Сразу оговорюсь - не пробовал - просто спросил
Первым же делом проверил этот факт, поэтому и задал вопрос То есть Reference добавить получается, а вот в коде не видит
Старый 14.10.2013, 06:51   #28  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Находил еще такую информацию, что можно установить Microsoft Office 2010(2007): Primary Interop Assemblies и все будет, но похоже без самого офиса он бесмыслен
Старый 14.10.2013, 06:54   #29  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Классы из пространства имён Microsoft.Office.Interop.Excel - всего лишь обертки для COM-объектов Excel, поэтому сделать доступной сборку можно, но правильный вопрос - можно ли сделать доступным сам Excel без установки офиса. Наверно, извратиться как-то можно, но стоит ли оно того?
Саму сборку добавить можно, но в коде нет доступа к ней.
В нашем случае, это нужно, чтобы ошибок компиляции не возникала при ежедневной компиляции.
Старый 21.01.2014, 21:23   #30  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Цитата:
Сообщение от Bega Посмотреть сообщение
Нашел способ через System.Array:
Если весь array состоит из System.String, то всё получается корректно. А если в некоторых ячейках числа (переведённые в строковый вид), то они потом экселем всё равно воспринимаются как строки Даже если при этом используется шаблон xlt, в котором у этой ячейки стоит формат данных числовой.
Числа нужно вставлять отдельным массивом с числовым типом ?
__________________
Дмитрий
Старый 23.01.2014, 10:28   #31  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
С работой метода Application.Union так и не разобрались ?
Я тут решил воспользоваться методом Range.TextToColumns. Он тоже не работает
__________________
Дмитрий
Старый 01.04.2014, 18:59   #32  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
а в 2012 в CIL эти классы могут работать?
пока падает с такой ошибкой:
X++:
 :    SysExcelApplication_NET.new,   CIL  .
Старый 02.04.2014, 13:03   #33  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Я недавно задействовал эти классы на 2012-й, поменял пару-тройку мест в коде, к которым с подозрением отнесся компилятор (вроде замены SysDictClass::is() на is и приведения anytype к Object перед использованием его в контексте, где предполагается ссылочный тип данных) - все работает, косяки работы с Excel через COM, которые полезли и в 2012-й, задушены на корню.

Ах, да: чтобы все это хозяйство работало в CIL, разумеется, надо перебить свойство RunOn у классов SysExcel*, потому что по умолчанию они все выполняются на клиенте.

Последний раз редактировалось gl00mie; 02.04.2014 в 13:06.
Старый 02.04.2014, 13:06   #34  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Я недавно задействовал эти классы на 2012-й, поменял пару-тройку мест в коде, к которым с подозрением отнесся компилятор (вроде замены SysDictClass::is() на is и приведения anytype к Object перед использованием его в контексте, где предполагается ссылочный тип данных) - все работает, косяки работы с Excel через COM, которые полезли и в 2012-й, задушены на корню.

Ах, да: чтобы все это хозяйство работало в CIL, разумеется, надо перебить свойство RunOn у родительских классов SysExcel*, потому что по умолчанию они все выполняются на клиенте.
А Union вылечили ?
Старый 02.04.2014, 13:21   #35  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Нет, до Union, к сожалению, руки не дошли - по правде сказать, я даже не проверял этот момент. У меня пока более приземленные интересы: чтобы импорт из Excel работал и не падал от любого чиха. К слову, в 2012-й выкинули импорт данных из "традиционных" шаблонов Excel, создаваемых мастером (в частности, классов SysDataExcelCOMWizard и SysDataExcelCOMPreview больше нет в стандартном приложении), а объединение ячеек штатно использовалось вроде только в сопутствующем классе SysDataExcelCOM, так что... решение проблемы актуально теперь лишь в случае, если объединение ячеек используется в каких-либо модификациях.

PS. Занятно, что сам класс SysDataExcelCOM в 2012-й остался - видимо, на случай, если он используется в каких-либо модификациях, поднимаемых с предыдущих версий.
За это сообщение автора поблагодарили: Logger (3).
Старый 24.04.2014, 14:33   #36  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
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  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
если посмотреть, в каком контексте она упоминается, то станет ясно, что она не нужна - ее упоминание можно смело выкинуть. Про нее "знает" класс, который должен для записей некоторых таблиц возвращать более-менее вразумительные описания, но если про какие-то таблицы он знать не будет, на импорте из Excel это никак не скажется
Старый 25.04.2014, 09:30   #38  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Из-за её отсутствия у меня не компилируется класс 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  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Да-да, см. мое сообщение выше
Старый 05.12.2014, 11:01   #40  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Я недавно задействовал эти классы на 2012-й
При использовании Excel в пакетном режиме у меня процесс excel.exe остаётся в памяти, не удаляется. Причём при последующих запусках пакетного задания второй процесс появляется и затем удаляется, а первый так и остаётся висеть. У вас также ?
Windows 2012R2, Ax 2012 R3, Office 2013

X++:
        workbook    = null;
        workbooks   = null;
        excel       = null;

        System.GC::Collect();
        System.GC::WaitForPendingFinalizers();
не помогает. Хотя в Ax2009 это работает корректно, ни одного процесса excel.exe в памяти не остаётся. У АОСа 2009-й аксапты ОС тоже Windows Server 2012R2, только Office 2010.
__________________
Дмитрий
Теги
.net, ax2009, excel, законченный пример, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
проблема использования Excel через clr Batuev Artem DAX: Программирование 8 22.08.2011 18:01
AX.NET: интеграция .NET-приложений с Аксаптой и (будущие) возможности облачных вычислений gl00mie DAX: Программирование 2 23.04.2010 00:47
Импорт даты через Excel OliaM DAX: Функционал 2 13.12.2007 10:32
Экспорт в Excel через WorkBooks.OpenText() Владимир Максимов DAX: Программирование 2 09.04.2004 17:16
Чтение Excel-ячейки в Аксапте (2.5) через COM AKIS DAX: Программирование 3 25.03.2004 20:18

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:02.