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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.01.2007, 00:38   #1  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Интересно
Согласно BUG: Excel ODBC Driver Disregards the FirstRowHasNames or Header Setting для Microsoft Jet OLE DB Provider должна работать возможность отключения с помощью параметра HDR=No этой возможности. Но у меня с такой строкой подключения "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + %1 + ";Extended Properties='Excel 8.0;Ndr=No;IMEX=1'" все равно первая строка принимается как заголовок (MDAC 2.7, ExcelXP)

Код, который я привел выше, не совсем корректно отображает данные в таких ячейках. Во-первых, сортировка идет в алфавитном порядке. Во-вторых, для ячеек, содержащих цифровые данные, имена будут отображаться в видет F1, F2 и т.д. В третьих, если встретятся одинаковые наименования (например, "дата"), то имена будет идти как "дата", "дата1" и т.д.

Сортировку можно побороть с помощью такого метода
X++:
{
    ExcelImportADO   excel;
    Counter                 fieldCount;
    Counter                 curField;
    FileNameOpen            fileName;
    COM Conn;

    COM SchemaTables;
    COM TableFields;
    COM SchemaColumns;
    COM Fields;
    COM Item;
    int i;
    ComVariant var;
    Array arr = new Array(Types::Class);
    Array values;
    str name;
    #define.adSchemaColumns(4)
    #define.adSchemaTables(20)
    ;

    filename = WinAPI::getOpenFileName(infolog.hWnd(), ["Microsoft Excel","*.xls"], '', "Выберите файл");
    if (!filename)
        throw error("@SYS26757");
    excel = new ExcelImportADO(fileName);
    if (excel.openFile())
    {
        fieldCount = excel.getFieldsCount();
        Conn = excel.getConnection();
        SchemaTables = Conn.OpenSchema(#adSchemaTables);
        while (!SchemaTables.EOF())
        {
            TableFields = SchemaTables.Fields();
            Item = TableFields.Item("TABLE_NAME");
            var = Item.value();
            info(strfmt("Table name : '%1'", var.bStr()));

            arr.value(1, new ComVariant());
            arr.value(2, new ComVariant());
            arr.value(3, var);
            arr.value(4, new ComVariant());
            SchemaColumns = Conn.OpenSchema(#adSchemaColumns, ComVariant::createFromArray(arr));
// к сожалению, сортировка для Excel не работает
//            SchemaColumns.sort("ORDINAL_POSITION"); 
            values = new Array(Types::String);
            while (!SchemaColumns.Eof())
            {
                Fields = SchemaColumns.Fields();
                Item = Fields.Item("COLUMN_NAME");
                var = Item.value();
                name = var.bStr();

                Item = Fields.Item("ORDINAL_POSITION");
                var = Item.value();
                values.value(var.double(), name);
                SchemaColumns.MoveNext();
            }
            for (i=1;i<=values.lastIndex();i++)
                info(values.value(i));
            break;
            //SchemaTables.MoveNext();
        }
    }
}
Для цифровых значений для правильной интерпретации необходимо указывать апостроф в начале. Простого указания формата ячейки как текст недостаточно

Общая рекомендация - всегда оставлять первую строку для заголовка (в принципе, наименования столбцов можно не задавать. В этом случае будут использоваться мена F1, F2 и т.д.)
__________________
Axapta v.3.0 sp5 kr2
Старый 31.01.2007, 09:09   #2  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,490 / 1060 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Цитата:
Сообщение от AndyD Посмотреть сообщение
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + %1 + ";Extended Properties='Excel 8.0;Ndr=No;IMEX=1'"
может из-за опечатки?
Ndr=No, а сам пишешь о Hdr=No
Теги
ado, download, excel, импорт, полезное, axapta

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
gl00mie: Read Excel table via ADO Blog bot DAX Blogs 2 09.04.2010 08:32
dynamicsusers: DL Tips And Tricks: ADO Database Reader (Jet way) - Excel Example Blog bot DAX Blogs 0 02.08.2007 03:50
casperkamal: Using ADO to read from Excel in Microsoft Dynamics Ax Blog bot DAX Blogs 2 14.05.2007 11:59

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:31.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.