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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.07.2016, 16:27   #1  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
QRCode в Excel их Ax12
Коллеги, доброго дня!

Подскажите как то можно выгружать "по человечески" QRCode в Эксель? Или нужно генерировать его картинку, сохранять на диск, вставлять картинку в Эксель, потом удалять картинку с диска? QRCode, по сути, это код номенклатуры в отчёте.

Заранее спасибо!
Старый 26.07.2016, 17:25   #2  
Craz is offline
Craz
Участник
 
56 / 19 (1) ++
Регистрация: 17.09.2009
Добрый день, можно попробовать воспользоваться буфером обмена.
Не знаю кто писал, у нас есть такой метод в классе ComExcelDocument_RU
Не знаю как под 12ку, но думаю что-то подобное можно адаптировать.

вызывается так
X++:
excel.insertImage('companyLogo', companyImage.Image, false, 230);
соответственно когда генерите QR Code он должен быть в форме Bitmap.

X++:
public void insertImage(
    MSOfficeBookMark_RU     _bookMark,
    Bitmap                  _bitmap,
    boolean                 _transparent    = false,
    int                     _incrementLeft  = 0,
    int                     _incrementTop   = 0,
    int                     _workSheet      = 1)
{
    COM     XLSWorkSheet, XLSrange;
    Image   image;
    COM     comApplication, shape, pf;
    ;

    if (!_bitmap)
        return;

    XLSWorkSheet    = this.getWorkSheet(_workSheet);
    if (!XLSWorkSheet)
       throw error("@DIS6043");

    XLSrange        = this.findRange(_bookMark);
    if (!XLSrange)
       throw error("@SYS27391");
    XLSrange.select();

    image = new Image();
    image.setData(_bitmap);
    image.clipboardCopy();

    XLSWorkSheet.pasteSpecial(0);

    comApplication  = m_comDocument.application();

    shape = comApplication.Selection();
    shape = shape.ShapeRange();

    if (_incrementLeft)
        shape.IncrementLeft(_incrementLeft);

    if (_incrementTop)
        shape.IncrementTop(_incrementTop);

    if (_transparent)
    {
        pf = shape.PictureFormat();
        pf.TransparentBackground(-1);
        pf.TransparencyColor(WinAPI::RGB2int(255,255,255));
    }
}
За это сообщение автора поблагодарили: Logger (1), Sada (1), arhat (1).
Старый 27.07.2016, 10:27   #3  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Вот как то так
X++:
public void processInExcelAfter()
{
    DataMatrix.net.DmtxImageEncoder                 encoder;
    DataMatrix.net.DmtxImageEncoderOptions          options;
    System.Drawing.Bitmap                           bitmap;
    BinData                                         bindata;
    System.IO.MemoryStream                          memoryStream;
    Binary                                          binary;
    SCMDeliverySchedId                              deliverySchedId;
    SetEnumerator                                   se;
    ;
    if (!QRCodeContainerSet.empty())
    {
        new InteropPermission(InteropKind::ClrInterop).assert();
        bindata = new BinData();        
        encoder = new DataMatrix.net.DmtxImageEncoder();
        options = new DataMatrix.net.DmtxImageEncoderOptions();
        options.set_Encoding(System.Text.Encoding::get_UTF8());        
        
        se      = QRCodeContainerSet.getEnumerator();
        
        while (se.moveNext())
        {
            [currentRow, deliverySchedId] = se.current();

            try
            {
                memoryStream    = new System.IO.MemoryStream();
                bitmap          = new System.Drawing.Bitmap(encoder.EncodeImage(deliverySchedId, options));
                bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat::get_Bmp());

                binary          = Binary::constructFromMemoryStream(memoryStream);
                bindata.setBinaryData(binary);

                excelDocument.insertImage(ComExcelDocument_RU::numToNameCell(2, currentRow), bindata.getData(), 5,5);
            }
            catch (Exception::CLRError)
            {
                //BP Deviation documented
                error(CLRInterop::getLastException().ToString());
            }
        }
        CodeAccessPermission::revertAssert();
    }
}
Теги
qrcode

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
atinkerersnotebook: Using Export To Excel in Dynamics AX to Create Reporting Data Sources Blog bot DAX Blogs 1 12.10.2013 01:13
atinkerersnotebook: Using the Dynamics AX Excel Add-In Blog bot DAX Blogs 1 25.09.2013 07:11
atinkerersnotebook: Walkthrough & Tutorial Summary Blog bot DAX Blogs 1 09.09.2013 09:11
atinkerersnotebook: Using Excel to Import Products & Services in Dynamics AX Blog bot DAX Blogs 0 19.07.2013 15:11
Sample Design Patterns: Microsoft Dynamics AX - Remedy for slow Microsoft Excel import Blog bot DAX Blogs 0 29.05.2011 17:13

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

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

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