• Export Internal Table to Excel using OLE 沧海


    ************************************************************************
    * 利用OLE将LIST中的数据输出到EXCEL工作表中
    ************************************************************************
    INCLUDE OLE2INCL.
    * 数据定义
    DATA: H_EXCEL TYPE OLE2_OBJECT,        " Excel object
          H_MAPL TYPE OLE2_OBJECT,         " list of workbooks
          H_MAP TYPE OLE2_OBJECT,          " workbook
          H_ZL TYPE OLE2_OBJECT,           " cell
          H_F TYPE OLE2_OBJECT.            " font
    DATA G_INFILE LIKE RLGRAP-FILENAME.
    DATA G_DESKTOP(100).
    DATA MSGTXT(50).

    ************************************************************************

    *&---------------------------------------------------------------------*
    *&      Form  NEW_SHEET
    *&---------------------------------------------------------------------*
    *       建立一个EXCEL工作表
    *----------------------------------------------------------------------*

    FORM FRM_NEWSHEET.
      CREATE OBJECT H_EXCEL 'EXCEL.APPLICATION'.
      PERFORM FRM_ERR_HDL.
      CALL METHOD OF H_EXCEL 'Workbooks' = H_MAPL.
      MSGTXT = '正在新建文件'.
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
         EXPORTING
               TEXT       = MSGTXT
           EXCEPTIONS
                OTHERS     = 1.
      PERFORM FRM_ERR_HDL.
      CALL METHOD OF H_MAPL 'Add' = H_MAP.
      PERFORM FRM_ERR_HDL.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  FRM_SELSHEET
    *&---------------------------------------------------------------------*
    *       选择用于输出报表的模板文件
    *----------------------------------------------------------------------*
    FORM FRM_SELSHEET .
      CALL FUNCTION 'GUI_GET_DESKTOP_INFO'
        EXPORTING
          type   = 12
        CHANGING
          return = G_DESKTOP.
      CALL FUNCTION 'WS_FILENAME_GET'
           EXPORTING
                def_path         = G_DESKTOP
                mask             = ',Microsoft Excel 文件,*.XLS.'
                mode             = 'O'               "'O'就是打开 'S'就是保存
                title            = '打开文件'
           IMPORTING
                filename         = G_INFILE
           EXCEPTIONS
                inv_winsys       = 1
                no_batch         = 2
                selection_cancel = 3
                selection_error  = 4
                OTHERS           = 5.
       IF SY-SUBRC = 3.
         STOP.
       ENDIF.
      CREATE OBJECT H_EXCEL 'EXCEL.APPLICATION'.
      PERFORM FRM_ERR_HDL.
      CALL METHOD OF H_EXCEL 'Workbooks' = H_MAPL.
      MSGTXT = '正在打开文件'.
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
         EXPORTING
               TEXT       = MSGTXT
           EXCEPTIONS
                OTHERS     = 1.
      PERFORM FRM_ERR_HDL.
      CALL METHOD OF H_MAPL 'OPEN' = H_MAP EXPORTING #1 = G_INFILE.
      PERFORM FRM_ERR_HDL.
    ENDFORM.                    " FRM_SELSHEET
    *&---------------------------------------------------------------------*
    *&      Form  FRM_SETWIDTH
    *&---------------------------------------------------------------------*
    *       设置EXCEL单元格宽度
    *----------------------------------------------------------------------*
    *  -->   COL      单元格列号
    *  -->   WIDTH    单元格列宽
    *----------------------------------------------------------------------*
    FORM FRM_SETWIDTH USING COL WIDTH.
      CALL METHOD OF H_EXCEL 'Cells' = H_ZL EXPORTING #1 = 1 #2 = COL.
      PERFORM FRM_ERR_HDL.
      SET PROPERTY OF H_ZL 'ColumnWidth' = WIDTH.
      PERFORM FRM_ERR_HDL.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  FRM_FILLCELL
    *&---------------------------------------------------------------------*
    *       将数据写入单元格
    *----------------------------------------------------------------------*
    *  -->   I        单元格行号
    *  -->   J        单元格列号
    *  -->   VAL      单元格值
    *----------------------------------------------------------------------*
    FORM FRM_FILLCELL USING I J VAL.
      CALL METHOD OF H_EXCEL 'Cells' = H_ZL EXPORTING #1 = I #2 = J.
      PERFORM FRM_ERR_HDL.
      DATA L_ROW(3).                       "单元格行
      DATA L_COL(3).                         "单元格列
      L_ROW   = I.
      L_COL   = J.
      CLEAR MSGTXT.
      CONCATENATE '正在写入单元格第' L_ROW '行,第' L_COL '列' INTO MSGTXT.
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
         EXPORTING
               TEXT       = MSGTXT
           EXCEPTIONS
                OTHERS     = 1.

      SET PROPERTY OF H_ZL 'Value' = VAL .
      PERFORM FRM_ERR_HDL.
    ENDFORM.                    "FILL_CELL
    *&---------------------------------------------------------------------*
    *&      Form  FRM_FREESHEET
    *&---------------------------------------------------------------------*
    *       释放该EXCEL对象
    *----------------------------------------------------------------------*

    FORM FRM_FREESHEET.
      MSGTXT = '文件写入完毕'.
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
         EXPORTING
               TEXT       = MSGTXT
           EXCEPTIONS
                OTHERS     = 1.
      SET PROPERTY OF H_EXCEL  'Visible' = 1.
      PERFORM FRM_ERR_HDL.
      FREE OBJECT H_EXCEL.
      PERFORM FRM_ERR_HDL.
    ENDFORM.                    "FREE_SHEET
    *&---------------------------------------------------------------------*
    *&      Form  FRM_ERR_HDL
    *&---------------------------------------------------------------------*
    *       显示出错信息并停止运行
    *----------------------------------------------------------------------*

    FORM FRM_ERR_HDL.
      IF SY-SUBRC <> 0.
        MESSAGE E001(ZDEV).
        PERFORM FRM_FREESHEET.
        STOP.
      ENDIF.
    ENDFORM.                    " ERR_HDL

    ************************************************************************
    * 利用OLE将LIST中的数据输出到EXCEL工作表中
    ************************************************************************

    *&---------------------------------------------------------------------*
    *&      Form FRM_GET_NAME
    *&---------------------------------------------------------------------*
    *       根据用户名,取得对应姓或名字
    *----------------------------------------------------------------------*
    *      -->L_CHAR(1)TYPE C.
    *         如果是:'',那就取得姓,否则取得全名
    *      -->L_NAME. 用户名
    *      <--L_NAME LIKE ADRP-NAME_LAST 或 L_NAME LIKE ADRP-NAME_TEXT.
    *----------------------------------------------------------------------*
    FORM FRM_GET_NAME USING L_USER L_FLAG CHANGING L_NAME.
      IF L_FLAG = ''.
        SELECT ADRP~NAME_LAST
          INTO (L_NAME)
          FROM USR21 INNER JOIN ADRP ON USR21~PERSNUMBER = ADRP~PERSNUMBER
          WHERE USR21~BNAME = L_USER.
        ENDSELECT.
      ELSE.
        SELECT ADRP~NAME_TEXT
          INTO (L_NAME)
          FROM USR21 INNER JOIN ADRP ON USR21~PERSNUMBER = ADRP~PERSNUMBER
          WHERE USR21~BNAME = L_USER.
        ENDSELECT.
      ENDIF.
    ENDFORM.

  • 相关阅读:
    SQL使用基本准则
    SQL使用技巧-或许你不知道的10条SQL技巧
    RabbitMQ安装遇到的坑
    编译安装python
    批量化杀死进程
    python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
    c++中 . 和 -> 的区别是什么?
    C语言中的malloc、new、memset函数解析
    C语言中static关键字用法
    struct和typedef struct的区别
  • 原文地址:https://www.cnblogs.com/omygod/p/1493374.html
Copyright © 2020-2023  润新知