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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.05.2016, 12:10   #34  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Моя старенькая AX2009 начала барахлить при выводе данных в Excel. Я использовал для вывода данных буфер обмена. Через много лет у некоторых пользователей (не у всех) стало вываливаться сообщение "Метод pastespecial возвратил код ошибки Неизвестно, которое обозначает Неизвестно".

В связи с этим переделал движок отчетов на технологию, описанную в этой ветке.
Обернул все тонкости работы с Recordset в класс zExcelADO, чтобы программирование отчета происходило на высоком уровне.
Вместо нулевых значений в Excel остаются пустые ячейки.
Методы DD_DrawGridToTheEnd и DD_FontBoldAndBackColor1 я таскаю с собой уже 10 лет
Класс zExcelADO прилагается. Ниже Job с примером

X++:
static void Job129(Args _args)
{
    zExcelADO         e = new zExcelADO();
    CustInvoiceJour   CustInvoiceJour;
    int               i;
    ;
    e.addField(Types::String);
    e.addField(Types::Date);
    e.addField(Types::UtcDateTime);
    e.addField(Types::Real);
    e.addField(Types::String);
    while select CustInvoiceJour
    {
        i++;
        if (i > 1000)
            break;
        e.addRecord();
        e.addCell(CustInvoiceJour.InvoiceId);
        e.addCell(CustInvoiceJour.InvoiceDate);
        e.addCell(CustInvoiceJour.createdDateTime);
        e.addCell(CustInvoiceJour.InvoiceAmount);
        e.addCell(CustInvoiceJour.salesTable().custTable_CustAccount().Name);
    }
    e.toExcel("A4");
    
    e.excel().insertValue("A1", "Список накладных");
    e.excel().insertValue("A2", "Первые 1000 штук");
    e.excel().insertValue("A3", "Номер");
    e.excel().insertValue("B3", "Дата");
    e.excel().insertValue("C3", "Дата создания");
    e.excel().insertValue("D3", "Сумма");
    e.excel().insertValue("E3", "Название клиента");

    e.DD_DrawGridToTheEnd("A3", 1, true);
    e.DD_FontBoldAndBackColor1("A1", "E3", true, -1, -1, -1, -1);
    e.excel().visible(true);
}
Данные с типом UTCDateTime выводятся в Эксель без времени, чтобы выводилось время, надо задать соответствующий формат ячеек. Можно подсунуть свой шаблон вызвав конструкцию типа
X++:
    e.excel(new ComExcelDocument_RU());
    e.excel().newFile("Имя файла.xlt",false);
Вложения
Тип файла: xpo Class_zExcelADO.xpo (11.0 Кб, 559 просмотров)
За это сообщение автора поблагодарили: Ruff (5), Gustav (10), Player1 (4).
Теги
ado, comvariant, excel, faq, odbc, sql, интеграция, прямой доступ, формат дат, экспорт, экспорт в excel

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вспомогательный класс для импорта из Excel через ADO gl00mie DAX: База знаний и проекты 80 10.04.2017 10:55
gl00mie: Read Excel table via ADO Blog bot DAX Blogs 2 09.04.2010 08:32
C# and AX Development: Using ADO for interfacing AX with an external database Blog bot DAX Blogs 0 05.08.2008 05:18
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, время: 02:16.