abap导出excel代码

来源:互联网 发布:苹果5s怎么设置3g网络 编辑:程序博客网 时间:2024/06/05 19:20

子文件 ZYQJH_INCLUDE :

*INCLUDE OLE2INCL.INCLUDE OLE2INCL.DATA: EXCELOBJ TYPE OLE2_OBJECT,       " Excel object      WBOOKOBJ TYPE OLE2_OBJECT,       " Workbook object      WSHEETOBJ TYPE OLE2_OBJECT,      " Worksheet object      RANGEOBJ TYPE OLE2_OBJECT,       " Range object      RANGEOBJ2 TYPE OLE2_OBJECT,       " Range object      CELLOBJ TYPE OLE2_OBJECT,        " Cell object    SRCFILE31(128) TYPE C VALUE 'C:\sapworkdir\111.xls'.   "source excelDEFINE CREATE_EXCEL.  CREATE OBJECT EXCELOBJ 'Excel.Application'.  " Create excel object  IF SY-SUBRC NE 0.    WRITE: / 'Excel init failed, return code is ', SY-SUBRC.    EXIT.  ELSE.    SET PROPERTY OF EXCELOBJ 'Visible' = 1.   " Set excel visible    CALL METHOD OF EXCELOBJ              " Create wbook object    'Workbooks' = WBOOKOBJ.    CALL METHOD OF WBOOKOBJ 'Open' = WBOOKOBJ      EXPORTING        #1 = &1.                                            "srcfile1.    CALL METHOD OF WBOOKOBJ              " Create wsheet object         'Worksheets' = WSHEETOBJ EXPORTING #1 = 'sheet1'.    CALL METHOD OF WSHEETOBJ 'Activate'.  ENDIF.END-OF-DEFINITION.DEFINE CREATE_EXCELA.  CREATE OBJECT EXCELOBJ 'Excel.Application'.  " Create excel object  IF SY-SUBRC NE 0.    WRITE: / 'Excel init failed, return code is ', SY-SUBRC.    EXIT.  ELSE.    SET PROPERTY OF EXCELOBJ 'Visible' = 0.   " Set excel visible    CALL METHOD OF EXCELOBJ              " Create wbook object    'Workbooks' = WBOOKOBJ.    CALL METHOD OF WBOOKOBJ 'Open' = WBOOKOBJ      EXPORTING        #1 = &1.                                            "srcfile1.    CALL METHOD OF WBOOKOBJ              " Create wsheet object         'Worksheets' = WSHEETOBJ EXPORTING #1 = 'sheet1'.    CALL METHOD OF WSHEETOBJ 'Activate'.  ENDIF.END-OF-DEFINITION.DEFINE SET_VISIBLE.  SET PROPERTY OF EXCELOBJ 'Visible' = 1.   " Set excel visibleEND-OF-DEFINITION.*---------------------------------------------------------------------**       FORM fill_range                                               **---------------------------------------------------------------------**       ........                                                      **---------------------------------------------------------------------**  -->  VALUE(F_RANGE)                                                **  -->  VALUE(F_VALUE)                                                **---------------------------------------------------------------------*FORM FILL_RANGE USING VALUE(F_RANGE)  VALUE(F_VALUE).  CALL METHOD OF WSHEETOBJ 'Range' = RANGEOBJ    EXPORTING      #1 = F_RANGE.  SET PROPERTY OF RANGEOBJ 'Value' = F_VALUE.ENDFORM.                    "fill_range*---------------------------------------------------------------------**       FORM fill_cell                                                **---------------------------------------------------------------------**       ........                                                      **---------------------------------------------------------------------**  -->  VALUE(F_RANGE)                                                **  -->  VALUE(F_VALUE)                                                **---------------------------------------------------------------------*FORM FILL_CELL USING VALUE(F_RANGE)  VALUE(F_VALUE).  CALL METHOD OF WSHEETOBJ 'Cells' = CELLOBJ    EXPORTING      #1 = F_RANGE.  SET PROPERTY OF RANGEOBJ 'Value' = F_VALUE.ENDFORM.                    "fill_cell*---------------------------------------------------------------------**       FORM insert_row                                               **---------------------------------------------------------------------**       ........                                                      **---------------------------------------------------------------------**  -->  VALUE(F_RANGE)                                                **---------------------------------------------------------------------*FORM INSERT_ROW USING VALUE(F_RANGE).  CALL METHOD OF WSHEETOBJ 'range' = RANGEOBJ    EXPORTING      #1 = F_RANGE.  CALL METHOD OF RANGEOBJ 'copy'.  CALL METHOD OF RANGEOBJ 'select'.  CALL METHOD OF RANGEOBJ 'insert'.  CALL METHOD OF RANGEOBJ 'clearcontents'.ENDFORM.                    "insert_row*插入后不清除内容,特别实用于题头和表头FORM INSERT_ROWA USING VALUE(F_RANGE).  CALL METHOD OF WSHEETOBJ 'range' = RANGEOBJ    EXPORTING      #1 = F_RANGE.  CALL METHOD OF RANGEOBJ 'copy'.  CALL METHOD OF RANGEOBJ 'select'.  CALL METHOD OF RANGEOBJ 'insert'.ENDFORM.                    "insert_rowa*插入后不清除内容,特别实用于题头和表头FORM DEL_ROW USING VALUE(F_RANGE1) VALUE(F_RANGE2).  DATA:S_RANGE(20) TYPE C.  CONCATENATE F_RANGE1 F_RANGE2 INTO S_RANGE.  CALL METHOD OF WSHEETOBJ 'range' = RANGEOBJ    EXPORTING      #1 = S_RANGE.  CALL METHOD OF RANGEOBJ 'delete'.ENDFORM.                    "del_rowDEFINE READ_DATA_FROM_LOCAL.  CALL FUNCTION 'WS_UPLOAD'      EXPORTING*         CODEPAGE            = ' '            FILENAME            = &1            FILETYPE            = 'DAT'*    IMPORTING*         FILELENGTH          =       TABLES            DATA_TAB            = &2       EXCEPTIONS            CONVERSION_ERROR    = 1            FILE_OPEN_ERROR     = 2            FILE_READ_ERROR     = 3            INVALID_TABLE_WIDTH = 4            INVALID_TYPE        = 5            NO_BATCH            = 6            UNKNOWN_ERROR       = 7            OTHERS              = 8.  IF SY-SUBRC = 2.    MESSAGE E005(ZYHY).  ENDIF.END-OF-DEFINITION.*传票生成使用DATA: SESSION,CTU,GROUP(12),CTUMODE,USER(12),CUPDATE,KEEP,      E_GROUP(12),HOLDDATE LIKE SY-DATUM,NODATA,      E_USER(12),E_KEEP,E_HDATE LIKE SY-DATUM,NODATE,SMALLLOG.DATA:   BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE.*       messages of call transactionDATA:   MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.*       error session opened (' ' or 'X')DATA:   E_GROUP_OPENED.*       message textsTABLES: T100.*&---------------------------------------------------------------------**&      Form  OPEN_GROUP*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------*FORM OPEN_GROUP.  IF SESSION = 'X'.    SKIP.    WRITE: /(20) 'Create group'(I01), GROUP.    SKIP.*   open batchinput group    CALL FUNCTION 'BDC_OPEN_GROUP'      EXPORTING        CLIENT   = SY-MANDT        GROUP    = GROUP        USER     = USER        KEEP     = KEEP        HOLDDATE = HOLDDATE.    WRITE: /(30) 'BDC_OPEN_GROUP'(I02),            (12) 'returncode:'(I05),                 SY-SUBRC.  ENDIF.ENDFORM.                    "OPEN_GROUP*----------------------------------------------------------------------**   end batchinput session                                             **   (call transaction using...: error session)                         **----------------------------------------------------------------------*FORM CLOSE_GROUP.  IF SESSION = 'X'.*   close batchinput group    CALL FUNCTION 'BDC_CLOSE_GROUP'.    WRITE: /(30) 'BDC_CLOSE_GROUP'(I04),            (12) 'returncode:'(I05),                 SY-SUBRC.  ELSE.    IF E_GROUP_OPENED = 'X'.      CALL FUNCTION 'BDC_CLOSE_GROUP'.      WRITE: /.      WRITE: /(30) 'Fehlermappe wurde erzeugt'(I06).    ENDIF.  ENDIF.ENDFORM.                    "CLOSE_GROUP*----------------------------------------------------------------------**        Start new transaction according to parameters                 **----------------------------------------------------------------------*FORM BDC_TRANSACTION USING TCODE.  DATA: L_MSTRING(480).  DATA: L_SUBRC LIKE SY-SUBRC.  CTUMODE = 'E' .* batch input session  IF SESSION = 'X'.    CALL FUNCTION 'BDC_INSERT'      EXPORTING        TCODE     = TCODE      TABLES        DYNPROTAB = BDCDATA.    IF SMALLLOG <> 'X'.      WRITE: / 'BDC_INSERT'(I03),               TCODE,               'returncode:'(I05),               SY-SUBRC,               'RECORD:',               SY-INDEX.    ENDIF.* call transaction using  ELSE.    REFRESH MESSTAB.    CALL TRANSACTION TCODE USING BDCDATA                     MODE   CTUMODE                     UPDATE CUPDATE                     MESSAGES INTO MESSTAB.    L_SUBRC = SY-SUBRC.    IF SMALLLOG <> 'X'.      WRITE: / 'CALL_TRANSACTION',               TCODE,               'returncode:'(I05),               L_SUBRC,               'RECORD:',               SY-INDEX.      LOOP AT MESSTAB.        SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA                                  AND   ARBGB = MESSTAB-MSGID                                  AND   MSGNR = MESSTAB-MSGNR.        IF SY-SUBRC = 0.          L_MSTRING = T100-TEXT.          IF L_MSTRING CS '&1'.            REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.            REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.            REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.            REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.          ELSE.            REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.            REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.            REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.            REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.          ENDIF.          CONDENSE L_MSTRING.          WRITE: / MESSTAB-MSGTYP, L_MSTRING(250).        ELSE.          WRITE: / MESSTAB.        ENDIF.      ENDLOOP.      SKIP.    ENDIF.** Erzeugen fehlermappe ************************************************    IF L_SUBRC <> 0 AND E_GROUP <> SPACE.      IF E_GROUP_OPENED = ' '.        CALL FUNCTION 'BDC_OPEN_GROUP'          EXPORTING            CLIENT   = SY-MANDT            GROUP    = E_GROUP            USER     = E_USER            KEEP     = E_KEEP            HOLDDATE = E_HDATE.        E_GROUP_OPENED = 'X'.      ENDIF.      CALL FUNCTION 'BDC_INSERT'        EXPORTING          TCODE     = TCODE        TABLES          DYNPROTAB = BDCDATA.    ENDIF.  ENDIF.  REFRESH BDCDATA.ENDFORM.                    "BDC_TRANSACTION*----------------------------------------------------------------------**        Start new screen                                              **----------------------------------------------------------------------*FORM BDC_DYNPRO USING PROGRAM DYNPRO.  CLEAR BDCDATA.  BDCDATA-PROGRAM  = PROGRAM.  BDCDATA-DYNPRO   = DYNPRO.  BDCDATA-DYNBEGIN = 'X'.  APPEND BDCDATA.ENDFORM.                    "BDC_DYNPRO*----------------------------------------------------------------------**        Insert field                                                  **----------------------------------------------------------------------*FORM BDC_FIELD USING FNAM FVAL.  IF FVAL <> NODATA.    CLEAR BDCDATA.    BDCDATA-FNAM = FNAM.    BDCDATA-FVAL = FVAL.    APPEND BDCDATA.  ENDIF.ENDFORM.                    "BDC_FIELD


在程序里引用此文件:

*-----------------------------------------------------------**导入包含文件                                                **-----------------------------------------------------------*INCLUDE ZYQJH_INCLUDE."插入EXECL的


需要输出时调用代码:LINE1是自动生成序号,LINE2是输出每一行的定位。

  CREATE_EXCEL 'C:\ZCOE010.xls'.  SORT ITAB BY BANFN BNFPO.  DATA: LINE1 TYPE I ,        LINE2 TYPE I ,        STR1(10) TYPE C,        STR2(10) TYPE C,        STR3(10) TYPE C,        STR4(10) TYPE C,        STR5(10) TYPE C,        STR6(10) TYPE C,        STR7(10) TYPE C,        STR8(10) TYPE C,        STR9(10) TYPE C,        STR10(10) TYPE C.  LINE2 = 4.  LINE1 = 1.  LOOP AT ITAB.    ITAB-ZLINE = LINE1.    WRITE LINE2 TO STR1.    CONDENSE STR1 NO-GAPS.    CONCATENATE 'A' STR1 INTO STR1.    WRITE LINE2 TO STR2 NO-GAP.    CONDENSE STR2 NO-GAPS.    CONCATENATE 'B' STR2 INTO STR2.    WRITE LINE2 TO STR3 NO-GAP.    CONDENSE STR3 NO-GAPS.    CONCATENATE 'C' STR3 INTO STR3.    WRITE LINE2 TO STR4 NO-GAP.    CONDENSE STR4 NO-GAPS.    CONCATENATE 'D' STR4 INTO STR4.    WRITE LINE2 TO STR5 NO-GAP.    CONDENSE STR5 NO-GAPS.    CONCATENATE 'E' STR5 INTO STR5.    WRITE LINE2 TO STR6 NO-GAP.    CONDENSE STR6 NO-GAPS.    CONCATENATE 'F' STR6 INTO STR6.    WRITE LINE2 TO STR7 NO-GAP.    CONDENSE STR7 NO-GAPS.    CONCATENATE 'G' STR7 INTO STR7.    WRITE LINE2 TO STR8 NO-GAP.    CONDENSE STR8 NO-GAPS.    CONCATENATE 'H' STR8 INTO STR8.    WRITE LINE2 TO STR9 NO-GAP.    CONDENSE STR9 NO-GAPS.    CONCATENATE 'I' STR9 INTO STR9.    WRITE LINE2 TO STR10 NO-GAP.    CONDENSE STR10 NO-GAPS.    CONCATENATE 'K' STR10 INTO STR10.    PERFORM FILL_RANGE USING STR1            ITAB-ZLINE.    PERFORM FILL_RANGE USING STR2            ITAB-DSNAM.    PERFORM FILL_RANGE USING STR3            ITAB-BANFN.    PERFORM FILL_RANGE USING STR4            ITAB-BNFPO.    PERFORM FILL_RANGE USING STR5            ITAB-TXZ01.    PERFORM FILL_RANGE USING STR6            ''.    PERFORM FILL_RANGE USING STR7            ITAB-MSEHL.    PERFORM FILL_RANGE USING STR8            ITAB-MENGE.    PERFORM FILL_RANGE USING STR9            ITAB-BADAT.    PERFORM FILL_RANGE USING STR10            ITAB-AFNAM.    PERFORM INSERT_ROW USING 'AA'.    LINE1 = LINE1 + 1.    LINE2 = LINE2 + 1.  ENDLOOP.

原创粉丝点击