TIPTOP ERP 与 Excel交互的编程应用

TIPTOP ERP 与 Excel交互的编程应用


1、TIPTOP ERP 汇出资料到Excel

TIPTOP ERP 与 Excel交互的编程应用_第1张图片


2、Excel导入资料到TIPTOP ERP系统

      A.Excel导入资料到TIPTOP ERP的原理

          调用客户端GDC目录/bin下面的Windde.dll或Wincom.dll组件,然后打开本机安装的Excel软件处理资料

          注意:Windde.dll或Wincom.dll都是后台偷偷打开了Excel,前台是看不到的

                    你可以在任务管理器里看到每导入一个Excel就会开启一个EXCEL.EXE的进程

         TIPTOP ERP 与 Excel交互的编程应用_第2张图片


      B.关键代码编写

          B-1.根据程序处理Excel资料的规则,coder先将excel模板放到服务器上,这里代码写下载功能,供用户下载excel资料模板

          #demo 

FUNCTION p413_download_excel()   #服务器下载模板
    DEFINE l_linuxPath   STRING
    DEFINE l_winPath     STRING
    DEFINE l_status      LIKE type_file.num5

    LET l_linuxPath = "$CUST/cxm/4gl/cxmp413.xls"
    LET l_winPath   = "c:\\tiptop\\cxmp413.xls"
    LET l_status = cl_download_file(l_linuxPath,l_winPath)
    IF l_status THEN
       CALL cl_err(l_linuxPath,"amd-020",1)
    ELSE
       CALL cl_err(l_linuxPath,"amd-021",1)    
    END IF
END FUNCTION

          B-2.处理excel资料,将excel资料导入TIPTOP ERP系统

          #demo

FUNCTION p413_upload_excel()   #导入Excel
    DEFINE l_sql      STRING
    DEFINE l_prostr   LIKE ze_file.ze03
    DEFINE l_fileLocation   STRING
    DEFINE xlApp,iRes,iRow  INTEGER
    DEFINE i          LIKE type_file.num5
    DEFINE l_cnt      LIKE type_file.num5
    DEFINE l_oeb16    LIKE oeb_file.oeb16
    DEFINE l_errcnt   LIKE type_file.num5
    DEFINE l_msg      LIKE type_file.chr1000
    DEFINE g_oeb      DYNAMIC ARRAY OF RECORD
                      seq   LIKE    type_file.num5,
                      oeb01 LIKE    oeb_file.oeb01,
                      oeb03 LIKE    oeb_file.oeb03,
                      oeb16 LIKE    oeb_file.oeb16
                      END RECORD
    
    CALL g_oeb.clear()
    
    LET l_prostr = cl_getmsg("lib-201", g_lang)
    WHILE TRUE   #选择要导入资料的Excel文件
        PROMPT l_prostr CLIPPED FOR l_fileLocation ATTRIBUTE(WITHOUT DEFAULTS)
           ON ACTION browse_document
              LET l_fileLocation = cl_browse_file()

           ON ACTION ACCEPT
              EXIT WHILE

           ON ACTION CANCEL
              EXIT WHILE

           ON IDLE g_idle_seconds
              CALL cl_on_idle()
              RETURN
        END PROMPT
    END WHILE

    LET l_errcnt = 0
    CALL ui.interface.frontCall('WinCOM','CreateInstance',['Excel.Application'],[xlApp])
    IF xlApp <> -1 THEN
        CALL ui.interface.frontCall('WinCOM','CallMethod',[xlApp,'WorkBooks.Open',l_fileLocation],[iRes])
        IF iRes <> -1 THEN
           CALL ui.interface.frontCall('WinCOM','GetProperty',[xlApp,'ActiveSheet.UsedRange.Rows.Count'],[iRow])
           IF iRow > 1 THEN
              FOR i = 2 TO iRow  #第2行开始,第1行为Excel抬头
                 INITIALIZE l_oeb16 TO NULL
                 #Excel 1 列
                 CALL ui.interface.frontCall('WinCOM','GetProperty',[xlApp,'ActiveSheet.Cells('||i||',1).Value'],[g_oeb[i-1].seq])
                 #Excel 2 列
                 CALL ui.interface.frontCall('WinCOM','GetProperty',[xlApp,'ActiveSheet.Cells('||i||',2).Value'],[g_oeb[i-1].oeb01])
                 #Excel 3 列
                 CALL ui.interface.frontCall('WinCOM','GetProperty',[xlApp,'ActiveSheet.Cells('||i||',3).Value'],[g_oeb[i-1].oeb03])
                 #Excel 4 列
                 CALL ui.interface.frontCall('WinCOM','GetProperty',[xlApp,'ActiveSheet.Cells('||i||',4).Value'],[g_oeb[i-1].oeb16])
              END FOR
           END IF
        END IF
    END IF
    CALL ui.interface.frontCall('WinCOM','CallMethod',[xlApp,'Quit'],[iRes])
    CALL ui.interface.frontCall('WinCOM','ReleaseInstance',[xlApp],[iRes])

    IF g_oeb.getLength() <= 0 THEN
       CALL cl_err('','anm-259',1)
    ELSE
       LET g_rec_b = g_oeb.getLength()
       LET l_msg = '共导入',g_rec_b,'笔!'
       CALL cl_msgany(0,0,l_msg)
       CALL p413_b()
    END IF 
END FUNCTION


http://blog.csdn.net/yihuiworld



你可能感兴趣的:(ERP,ERP实施,Tiptop,易拓,4gl,鼎捷)