Показать сообщение отдельно
Старый 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. Причина: косяк