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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.11.2003, 17:23   #1  
ANVA is offline
ANVA
Участник
 
24 / 10 (1) +
Регистрация: 04.08.2003
Адрес: Mocква
Сначала необходимо создать файл Excel.

X++:
boolean createExcelFile(container _fieldLabels)
{
    COM     workBook;
    COM     application = new COM('Excel.application');
    ;
    try
    {
        workBook = this.createEmptyBook(application);

        if (! workBook)
            return false;
    }
    catch(Exception::Error)
    {
        infolog.clear();
        info("@SYS55051");
    }

    if(application)
    {
        if(workBook)
        {
            workBook.Save();
        }
        application.quit();
    }

    return true;
}
После того как файл подготовлен и сохранен на диске, к нему можно подключаться, используя ADO. Для подключения используется следующая строка:

X++:
protected str connectionString()
{

    return 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + fileName +
           ';Mode=ReadWrite|Share Deny None;Extended Properties="Excel 8.0;HDR=No";Persist Security Info=False;';
}
Следующим шагом надо создать таблицу. В качестве таблиц используются листы Excel. В нашем случае, мы будем использовать таблицу с именем Axapta.

X++:
    COM adx  = new COM("ADOX.Catalog");
    COM     adoConnection, adoErrors, adoError;
    str txtError;
    ;    
    adoConnection = new COM("ADODB.Connection");

    if(! adoConnection)
        throw error("Ошибка подключения к источнику данных");

        adoConnection.open(this.connectionString(), "", "", -1);

        if(adoConnection.state() != #adStateOpen)
            throw error("Ошибка подключения к источнику данных ");

        adx.ActiveConnection(adoConnection);

        tbls = adx.Tables();
        tbl  = new COM("ADOX.Table");
        tbl.name("Axapta");
        cols = tbl.Columns();
По какому-то принципу создаем нужные нам поля, указываем их тип, ширину и название колонок. Я не очень уверен, но, по-моему, русский язык в названиях не поддерживается. Потому я использовал латинские названия.

X++:
    for (i=1;..)
    {   
        _col = new COM("ADOX.Column");
        _col.Name(strfmt("F%1", i));
        _col.Type(#adWChar); // Эта и другие константы ADO объявлены в макросе CCADO
        _cols.Append(_col);
     }
Далее можно вставлять записи, используя стандартную команду insert SQL. При этом не забывать брать в одинарные кавычки строки и даты. Обратите внимание на переменную table. Название таблицы в должно быть заключено именно в такие `` кавычки. FieldList - строка вида F1..Fn. Это те названия колонок, которые были определены выше.

X++:
While (queryRun.next())
{
        table     = strfmt("`%1$`", 'Axapta');
        queryString  = "insert into " + table + "(" + fieldsList + ") values (" + labelsList + ")";
        _adoConnection.execute(queryString);
}
Можно так же использовать объектную модель ADO (Объекты RecordSet и т.д) если это больше подходит. Последний момент - обработка ошибок:

X++:
     catch(Exception::Error)
    {
        if(adoConnection)
        {
            adoErrors = adoConnection.Errors();

            for(i=0; i < adoErrors.Count(); i++)
            {
                adoError = adoErrors.Item(i);
                txtError = adoError.Description();
                error(txtError);
            }
            adoConnection.close();
        }
Рекомендую посмотреть статью MSDN Knowledge Base (KB Q257819) "HOWTO: Use ADO and ADOX with Excel Data from Visual Basic or VBA".
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
Быстрый способ вывода данных в Excel с картинками Zlojbarsuk DAX: Программирование 10 23.10.2008 20:13
[Excel] - Несколько версий Excel на машине клиента Андре DAX: Программирование 11 07.08.2007 13:45
Вызов Item() для коллекций Excel Владимир Максимов DAX: Программирование 15 17.08.2006 19:47
Excel быстрый вывод Кирилл DAX: Программирование 14 03.06.2004 12:23

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

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

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