Показать сообщение отдельно
Старый 12.08.2011, 15:22   #61  
niksen is offline
niksen
Участник
Самостоятельные клиенты AX
 
284 / 28 (1) +++
Регистрация: 05.07.2011
Адрес: Татарстан
а у меня не заработало, все исправления, которые есть использовал, всё равно не хочет нормально работать
использовал вот этот job
X++:
static void CorrectADOFileImport(Args _args)
{
    ExcelImportADO   excel;
    Counter                 fieldCount;
    Counter                 curField;
    FileNameOpen            fileName;
    COM adoxCatalog = new COM(@"ADOX.Catalog");
    COM Tables;
    COM Table;
    COM Columns;
    COM Column;
    int i;
    ;
    filename = WinAPI::getOpenFileName(infolog.hWnd(), ["Microsoft Excel","*.xls"], '', "Выберите файл");
    if (!filename)
        throw error("@SYS26757");
    excel = new ExcelImportADO(fileName);
    if (excel.openFile())
    {
        fieldCount = excel.getFieldsCount();

        adoxCatalog.ActiveConnection(excel.getConnection());
        Tables   = adoxCatalog.Tables();
        Table = Tables.Item(0);
        if (Table)
        {
            Columns = Table.Columns();
            for (i=0;i<Columns.Count();i++)
            {
                Column = Columns.Item(i);
                if (Column)
                    info(Column.Name());
            }
            box::info(int2str(fieldCount));
            while (!excel.eof())
            {
                info(excel.getFieldValue(1, true));
                info(excel.getFieldValue(2, true));
                info(excel.getFieldValue(3, true));
                info(excel.getFieldValue(4, true));
                info(excel.getFieldValue(5, true));
                for (curField = 6; curField < fieldCount; curField++)
                {
                    info(excel.getFieldValue(curField, true));
                }
                return; //только первую строку
                //excel.moveNext();
            }
        }
    }
}
вместе с файлом импорт.xls, который выложил propeller.
пробегая дебаггером заметил, что он даже не читает его, вылетая вот с этой ошибкой
Цитата:
Метод "Open" в COM-объекте класса "ADODB.Recordset" возвратил код ошибки 0x80004005 (E_FAIL), который означает: Недопустимое имя '0$'. Проверьте, что оно не содержит недопустимые символы или знаки препинания, а также не является слишком длинным.
может кто-нибудь выгрузит полностью готовый рабочий класс и job к нему?
p.s. dax 2009, строка в declaration
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + %1 + ";Extended Properties='Excel 8.0;HDR=No;FirstRowHasNames=0;IMEX=1'"

p.p.s. а так хочется использовать этот класс для того, чтобы записывать данные в таблицы через классы Ax типа AxInventTable и им подобные
хочу сам немного доработать этот класс, чтобы в первой ячейка например указывалась таблица, в которую вставлялись поля, а дальше список полей во второй строке, после чего строчки с данными. Думаю тогда импорт через стандартные группы определений Excel сам собой бы отпал с его низкой скоростью.

Последний раз редактировалось niksen; 12.08.2011 в 16:48.