Merhaba,
Bugün excel tablomuzdaki verileri method yardımı ile ax içerisindeki tablomuza aktarma yapacağız. İnternette konuyla alakalı birçok method bulunmakta. Ben de kullandığım methodu paylaşmak istedim.

İhtiyaç halinde birden çok sayfalı bir exceli tek seferde aktarmak için aşağıdaki job içerisinde döngü kullanacağız. Burada dikkat edilmesi gereken husus döngü kullanacaksanız “worksheet   = worksheets.itemFromNum(1);//sayfa numarası şeklinde kullanmaktır.

Birden çok sayfa aktarılmayacaksa “worksheet   = worksheets.itemFromName(“Sayfa1”);//sayfa adı” şeklinde de kullanılabilir.

Öncelikle aktarılacak excel dosyamızı hazırlıyoruz.Örnek olarak basit bir dosya hazırladım.

Y016_AX 2012 Excelden veri aktarma-1

Y016_AX 2012 Excelden veri aktarma-1

 

Aktaracağımız excel dosyası hazır ise dosyamızı aşağıda paylaştığım dialog ile seçiyoruz. Ve aktarımı gerçekleştiriyoruz.

Y016_AX 2012 Excelden veri aktarma-2

Y016_AX 2012 Excelden veri aktarma-2

static void Axakal_ExcelImport(Args _args)
{
    SysExcelApplication             application;
    SysExcelWorkbooks               workbooks;
    SysExcelWorkbook                workbook;
    SysExcelWorksheets              worksheets;
    SysExcelWorksheet               worksheet;
    SysExcelCells                   cells;
    COMVariantType                  type;
    FilenameOpen                    filename;
    string100                       description;
    Axakal_DenemeTmp                tmp;
    Dialog                          d;
    dialogfield                     excelFile;
    int                             row = 1;
    int                             currentPage,lastPage;
    ;
    
    application = SysExcelApplication::construct();
    workbooks   = application.workbooks();
    
    //dialog oluşturma
    d = new dialog("Dosya seçin");
    d.filenameLookupFilter(['xls,xlsx','*.xls;*.xlsx']);
    excelFile  = d.addField(extendedTypeStr(FileNameOpen),"Aktarılacak dosya"); //Dosya seçme dialoğu çıkartır
        
    if(!d.run())
        return;
 
    filename = excelFile.value();
    
    if(filename == "")
        throw error("Dosya adı yok");
    try
    {
        workbooks.open(filename);
    }
    catch (Exception::Error)
    {
        throw error("Dosya bulunamadı");
    }
    
    for(currentPage =1;currentPage<=lastPage;currentPage++)//birden çok sayfalı bir excel aktarılacaksa sayfalar için döngü kullanılabilir.
    {
        workbook    = workbooks.item(1);
        worksheets  = workbook.worksheets();
        worksheet   = worksheets.itemFromNum(1);//sayfa numarası
        worksheet   = worksheets.itemFromName("Sayfa1");//sayfa adı
        cells       = worksheet.cells();
        
        ttsBegin;

        do
        {
            row++;//satır saysı

            tmp.clear();
            tmp.LineNum     = cells.item(row,1).value().int();//cells.item(satırNo,sıraNo).value().veriTuru()
            tmp.transType   = cells.item(row,2).value().bstr();
            tmp.transTotal  = cells.item(row,3).value().double();
            tmp.description = cells.item(row,4).value().bstr();
            //tmp.date        = cells.item(row,5).value().date();//excelden alınan veri tiplerine göre değişecektir.
            tmp.insert();

            type = cells.item(row+1, 1).value().variantType();
        } while (type != COMVariantType::VT_EMPTY);

        ttsCommit;

    }
    application.quit();
    info("Aktarım tamamlandı..");
}

 

İlgili jobı istediğimiz form/class vb nesnelere ekleyerek kullanabilirsiniz.

Şeref Böğürtleyen tarafından paylaşılmıştır

Dyanmics AX, SSRS Reports Developer

Yorum yaz

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir