Показать сообщение отдельно
Старый 11.01.2007, 13:02   #12  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (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).