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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.12.2003, 20:02   #1  
skvach is offline
skvach
Участник
 
4 / 10 (1) +
Регистрация: 02.12.2003
Angry COM и работа с шаблонами Excel
дописываю обертку COM для Excel (SysExcel и его потомки не включают всю необходимую функциональность):

COM COMApplication
COM COMSheets
COM COMSheetSRC,
COM COMSheetDST
COM COMRangeSRC;
COM COMRangeDST;
COM COMRangeRows
COM COMRangeCols
COM COMRangeRowCount;
COM COMRangeColCount;

ComVariant a;

COMapplication=excel.comObject(); //это родной, из SysExcel
COMSheets=COMApplication.Worksheets();
COMSheetSRC=COMSheets.Item(2);
COMSheetDST=COMSheets.Item(1);
COMrangeSRC=COMSheetSRC.Usedrange();
COMrangeDST=COMSheetDST.Usedrange();
COMrangeRows=COMrangeDST.Rows();
COMrangeCols=COMrangeDST.Columns();
COMrangeColCount=COMRangeCols.Count();



a=COMVariant::createFromCOM(COMRangeColCount);

Компилятор молчит,а уже при вызове метода инициализировать A не удается, сообщение об ошибке: Неправильные типы аргументов в операции присвоения значения. Что не в порядке?

дальше должно быть вот что:

a.int(-a.int()+1);
COMRangeDST=COMRangeDST.Offset(COMRangeRows.Count(), a);

но не уверен, что и тут не будет ошибки приведения типов

как правильно получить значение из свойства COM-объекта, привести его к какому-нибудь типу (int или строка, например), проделать над ним операции и затем снова передать в качестве параметра методу COM-объекта?
Старый 03.12.2003, 15:39   #2  
ANVA is offline
ANVA
Участник
 
24 / 10 (1) +
Регистрация: 04.08.2003
Адрес: Mocква
IMHO COMRangeCols.Count() вернет int, а не COM. В этом все дело. А компилятор и будет молчать, поскольку Axapta использует позднее связывание. Так же можно воспользоваться мастером оболочек для COM объектов в Axapta (сервис->средства разработки->мастера) и посмотреть какой код предложит тебе система.

По поводу приведения типов: в axapta нет операций приведения типа. Если из одного типа нужно получить дугой - используй функции типа any2int, int2str и т.д. /
VARIANT в automation и Axapta COMVariant - разные вещи и по-разному работают. Например, попробуй сл. job:

static void Job1(Args _args)
{
COMVariant c = COMVariant::createFromInt(1);
print c.bStr();
pause;
}

Это нормальная работа для automation, но в Axapta это не так. Axapta ненапечатает ничего.
Старый 03.12.2003, 15:47   #3  
skvach is offline
skvach
Участник
 
4 / 10 (1) +
Регистрация: 02.12.2003
Цитата:
IMHO COMRangeCols.Count() вернет int, а не COM. В этом все дело. А компилятор и будет молчать, поскольку Axapta использует позднее связывание. Так же можно воспользоваться мастером оболочек для COM объектов в Axapta (сервис->средства разработки->мастера) и посмотреть какой код предложит тебе система.
нет, точно COM а не int. Первой мыслью было сделать

COMRangeDST=COMRangeDST.Offset(COMRangeRows.Count(),1-COMRangeCols.Count());

но Axapta вернула сообщение об ошибке приведения типов
Старый 03.12.2003, 16:04   #4  
ANVA is offline
ANVA
Участник
 
24 / 10 (1) +
Регистрация: 04.08.2003
Адрес: Mocква
Попробуй вот так

COMVariant c = COMVariant::createFromCOM(....

и посмотри что упадет в с.
Старый 03.12.2003, 16:08   #5  
skvach is offline
skvach
Участник
 
4 / 10 (1) +
Регистрация: 02.12.2003
тот же результат
Старый 03.12.2003, 16:15   #6  
ANVA is offline
ANVA
Участник
 
24 / 10 (1) +
Регистрация: 04.08.2003
Адрес: Mocква
Извини за пред. post ты делал то же самое выше... Что скажет такой код?

COMRangeDST=COMRangeDST.Offset(COMVariant::createFromInt(COMRangeRows.Count()),ComVariont::createFromInt(1-COMRangeCols.Count()));
Старый 04.12.2003, 16:58   #7  
skvach is offline
skvach
Участник
 
4 / 10 (1) +
Регистрация: 02.12.2003
мы делаем что-то не то
это тоже не сработало
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема с импортом из Excel через COM Romsrs DAX: Программирование 18 10.06.2008 10:34
Работа с Excel через COM в DAX 4.0 Paul_ST DAX: Программирование 4 17.07.2007 16:45
Работа с Excel через COM и ошибка 0x800A03EC (Range.AutoFilter) gl00mie DAX: Программирование 15 30.03.2007 18:37
Чтение Excel-ячейки в Аксапте (2.5) через COM AKIS DAX: Программирование 3 25.03.2004 20:18

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

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

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