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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.01.2007, 13:02   #1  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2480 (88) +++++++++
Регистрация: 20.08.2005
А, в принципе, можно обойтись и средаствами Axapta, если считывать по одной строке или колонке.
X++:
{
    ComExcelDocument_RU excel = new ComExcelDocument_RU();
    Com doc;
    Com app;
    Com sheet;
    Com range;
    Array arr;
    int j;
    COMVariant v;

    Array GetArrayFromVariant(COMVariant var)
    {
        Binary bin = new Binary(100);
        int dims;
        Array   ret = null;
        int cols, rows;
        int lBound;
        int i;
        int locks;
        ;
        if (var && var.variantType() == COMVariantType::VT_SAFEARRAY)
        {
            bin.attach(var.int(), 24);
            dims = bin.word(0);
            if (dims == 2)
            {
                bin.attach(var.int(), 16 + dims * 8);

                cols = bin.dWord(16);
                rows = bin.dWord(24);
                if (rows == 1)
                {
                    locks = bin.dWord(8);
                    if (locks == 0)
                    {
                        bin.dWord(8, locks+1);
                        bin.word(0, 1);
                        try
                        {
                            ret = var.safeArray();
                            bin.word(0, dims);
                            bin.dWord(8, locks);
                        }
                        catch
                        {
                            bin.word(0, dims);
                            bin.dWord(8, locks);
                        }
                    }
                }
                else if (cols == 1)
                {
                    locks = bin.dWord(8);
                    if (locks == 0)
                    {
                        bin.dWord(8, locks+1);
                        lBound = bin.dWord(20);
                        bin.dWord(16, rows);
                        bin.dWord(20, bin.dWord(28));
                        bin.word(0, 1);
                        try
                        {
                            ret = var.safeArray();
                            bin.word(0, dims);
                            bin.dWord(16, cols);
                            bin.dWord(20, lBound);
                            bin.dWord(8, locks);
                        }
                        catch
                        {
                            bin.word(0, dims);
                            bin.dWord(16, cols);
                            bin.dWord(20, lBound);
                            bin.dWord(8, locks);
                        }
                    }
                }
            }
            else if (dims == 1)
                ret = var.safeArray();
        }
        return ret;
    }
    ;
    excel.open("Имя файла Excel для загрузки.xls",true);
    doc = excel.getComDocument();
    app = doc.Application();
    sheet = app.activeSheet();
    range = sheet.range("D1:D100");

    arr = GetArrayFromVariant(range.value2());

    if (arr)
    {
        for (j=1;j<=arr.lastIndex();j++)
        {
            v = arr.value(j);
            switch (v.variantType())
            {
                case COMVariantType::VT_BSTR:
                    info(v.bStr());
                    break;
                case COMVariantType::VT_INT:
                    info(strfmt("%1", v.int()));
                    break;
                case COMVariantType::VT_R8:
                    info(strfmt("%1", v.double()));
                    break;
            }
        }
    }
}
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 11.01.2007 в 13:12.
За это сообщение автора поблагодарили: olesh (1), belugin (14), alex55 (2).
Старый 11.01.2007, 13:51   #2  
olesh is offline
olesh
Участник
 
58 / 26 (1) +++
Регистрация: 02.04.2002
Адрес: Москва
Цитата:
Сообщение от AndyD Посмотреть сообщение
А, в принципе, можно обойтись и средаствами Axapta, если считывать по одной строке или колонке.
О, то что надо, в принципе! Импорта достаточно построчного. Андрей, а где можно почитать про побайтную структуру safearray? Туда бы еще добавить обработку типов дата/время.
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Импорт из 'офисной БД' (Excel, Access) Gustav DAX: База знаний и проекты 4 07.06.2008 17:17
Импорт строк PurchLine (через функционал) kaw DAX: Функционал 8 20.03.2008 14:49
Помогите сделать действие в Excel через COM kashperuk DAX: Программирование 25 10.09.2007 15:59
Импорт из Excel через шаблон стандартными средствами аксапты NV DAX: Функционал 5 20.01.2005 12:26
Импорт бюджета из Excel OliaM DAX: Функционал 16 13.01.2005 21:56

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

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

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