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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.02.2015, 14:25   #1  
АртемМелихов is offline
АртемМелихов
Участник
Аватар для АртемМелихов
 
120 / 10 (1) +
Регистрация: 18.12.2013
Адрес: Samara
Загрузка данных из Excel COM
Добрый день, ситуация такая: есть файл Excel в котором есть ячейка с числом 1000. Данные загружаются в аксапту, и затем используются для создания журнала. И в при одном варианте загрузки мы получаем 1000,00, а при другом 1. Данные дергаем вот так :
X++:
 Fields.itemIdx(  ).Value()
Fields - это экземпляр класса CCADOField, соответственно метод value содержит :
X++:
anytype value()
{
    COMVariant  value;
    real        tmp;

    value = field.value();

    switch (value.variantType())
    {
        case COMVariantType::VT_I2:
            return value.byte();

        case COMVariantType::VT_I4:
            return value.int();

        case COMVariantType::VT_R4, COMVariantType::VT_R8:
            //VSN003_FD_022_boss_import_dPul -->
            tmp = value.double();
            if (tmp == 0)
                tmp = value.float();
            //VSN003_FD_022_boss_import_dPul <--
            return tmp;

        case COMVariantType::VT_CY:
            return value.currency();

        case COMVariantType::VT_DATE:
            return value.date();

        case COMVariantType::VT_BSTR:
            return value.bStr();

        case COMVariantType::VT_BOOL:
            return value.boolean();

        case COMVariantType::VT_DECIMAL:
            return value.decimal();

        case COMVariantType::VT_I1:
            return value.byte();

        case COMVariantType::VT_UI1:
            return value.uInt();

        case COMVariantType::VT_UI2:
            return value.uShort();

        case COMVariantType::VT_UI4:
            return value.uLong();
    }
    return '';
}
и при хорошем варианте мы получаем в switch - "1000"VT-R8, а в плохом - "1000"VT_BSTR. Год назад я решал похожую проблему, тем что удалял лишние пробелы в том что возвращал метод value(), но сейчас я натолкнулся на вариант который первоначально загружает в правильном формате, поэтому и пытаюсь разобраться в чем у них разница. Подскажите, куда копать!
P.S. Формат ячейки :

если поменять формат ячейки на числовой, то все работает правильно. Но это ведь не дает ответ, почему в одном варианте загрузки все работает и со старым форматом ячейки!

Последний раз редактировалось АртемМелихов; 05.02.2015 в 14:39. Причина: косяк
Старый 05.02.2015, 16:12   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Вам нужны ответы на экзистенциальные вопросы или работающий импорт? Для второго в свое время был реализован класс для преобразования значений между различными значимыми типами
За это сообщение автора поблагодарили: Logger (3).
Старый 09.02.2015, 07:46   #3  
АртемМелихов is offline
АртемМелихов
Участник
Аватар для АртемМелихов
 
120 / 10 (1) +
Регистрация: 18.12.2013
Адрес: Samara
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Вам нужны ответы на экзистенциальные вопросы или работающий импорт? Для второго в свое время был реализован класс для преобразования значений между различными значимыми типами
Спасибо за ссылку, но мне бы хотелось разобраться в моменте импорта из экселя. А именно, как определяется COMVariantType::........ у данных, загружаемых из экселя. Я прислал пример кода, где используется переменная загруженная из экселя, которая потом прогоняется через switch. Но глубже меня Аксапта не пускает.
Старый 09.02.2015, 09:29   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Разбирайтесь - кто ж запретит. Расскажите потом, что удалось раскопать
Мне лично кажется, что "настоящий" тип COMVariant определяется не в AX, а в Exсel. Чтобы разобраться с этим, можно сохранить исходный файл Excel в формате XML Spreadsheet и посмотреть на нужную ячейку в XML-виде - это даст некоторое представление о том, что сам Excel думает о типе данных ячейки.
Теги
excel com формат

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
atinkerersnotebook: Using Vendor Requests to Manage On-boarding New Vendors Blog bot DAX Blogs 1 22.10.2013 02:24
atinkerersnotebook: Using Service Management to Track Service Orders Blog bot DAX Blogs 1 25.08.2013 19:16
emeadaxsupport: New Content for Microsoft Dynamics AX 2012 : October 2011 Blog bot DAX Blogs 0 27.10.2011 17:11
Sample Design Patterns: Microsoft Dynamics AX - Remedy for slow Microsoft Excel import Blog bot DAX Blogs 0 29.05.2011 17:13

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

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

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