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.

专注于企业信息化,最近对股票数据分析较为感兴趣,可免费分享股票个股主力资金实时变化趋势分析工具,股票交流QQ群:457394862

本文转自沧海-重庆博客园博客,原文链接:XXXXXX,如需转载请自行联系原作者
目录
相关文章
|
人工智能 JavaScript 算法
js将table生成excel文件并去除表格中的多余tr(js去除表格中空的tr标签)
js将table生成excel文件并去除表格中的多余tr(js去除表格中空的tr标签)
144 1
|
JSON 前端开发 JavaScript
Bootstrap Table表格分页的使用及分页数据(Excel)导出
Bootstrap Table表格分页的使用及分页数据(Excel)导出
120 0
表格(table)数据导出成Excel
表格(table)数据导出成Excel
108 0
|
JavaScript 前端开发
html table 如何导出为excel表格案例分享
html table 如何导出为excel表格案例分享
html table 如何导出为excel表格案例分享
|
人工智能 前端开发 JavaScript
js将table生成excel文件并去除表格中的多余tr(js去除表格中空的tr标签)
由于数据非常的乱,php的方法肯定是行不通了,于是我打算 用前端的方法将table表中的数据下载下来。于是乎 ,我打印看了下源代码,发现多了很多tr标签。做好了之后,可以正常使用,将数据库的信息筛选出来。,其他网上的我的没有成功,这个可以解决。但是下载下来的文件,出现空格。可以参考这个文件,很有用。对方加了一个功能下载,将其替换掉 完美解决。......
123 0
js将table生成excel文件并去除表格中的多余tr(js去除表格中空的tr标签)
|
JavaScript
VUE element-ui 之table表格导出Excel(自定义表头+自定义导出字段内容)
VUE element-ui 之table表格导出Excel(自定义表头+自定义导出字段内容)
1426 0
|
JavaScript 前端开发
VUE element-ui 之table表格导出Excel功能封装(纯前端实现)
VUE element-ui 之table表格导出Excel功能封装(纯前端实现)
537 0
|
PHP
php导出excel,使用table,如何让首位是0的纯数字字符串保留首位的0
php导出excel,使用table,如何让首位是0的纯数字字符串保留首位的0
303 0
php导出excel,使用table,如何让首位是0的纯数字字符串保留首位的0