SAP OLE excel导出多个sheet页(超全,可复用通用)

效果图第一个sheet页:第二个sheet页:*整体思路:*先打开excel,整理好数据*1.拷贝模板,复制sheet页 PERFORM frm_add_excel_sheet .*2.在遍历中打开sheet页,根据sheet页填充单元格 PERFORM frm_open_excel_sheet USING sy-tabix .*3.主程序 CLEAR gv_filename.* 获取下载文件路径 PERFORM f_frm_download_excel_modu
摘要由CSDN通过智能技术生成

效果图

第一个sheet页:
第一个sheet页

第二个sheet页:
另一个sheet页
废话不多说,直接运行程序。有个结构需要建一下
一个结构,不建也行 删掉那个form就行

主程序
定义变量

*&---------------------------------------------------------------------*
*& Report ZYMPG003
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zympg003.


CONSTANTS: c_objid_header     TYPE  w3objid     VALUE 'ZFFM026'.                   " EXCEL模板-全周期铺排项目参数配置模板

DATA: gv_filename  TYPE rlgrap-filename VALUE 'D:\全周期铺排项目参数导入模板' .    "文件名称 .

DATA: g_excel TYPE ole2_object,
      g_wbook TYPE ole2_object,
      g_sheet TYPE ole2_object,
      g_cell  TYPE ole2_object.

TYPES:BEGIN OF ty_item,
        posid TYPE prps-posid,
        post1 TYPE prps-post1,
      END OF ty_item.
DATA:gt_item TYPE TABLE OF ty_item,
     gs_item TYPE ty_item.

DATA:g_tabix TYPE sytabix.

*  获取下载文件路径
PERFORM f_download_path USING gv_filename .

CHECK gv_filename IS NOT INITIAL.

* 下载模板
PERFORM f_download_excel_fromserver USING c_objid_header  "smw0的文件名
                                          gv_filename.     "从服务器中下载EXCEL模板到L_FILENAME* 初始化OLE  F_OPEN_EXCEL_VISIBLE   F_OPEN_EXCEL_hide
PERFORM f_open_excel_visible USING gv_filename CHANGING g_excel g_wbook sy-subrc.

* 拷贝sheet页  实时项目编码描述表(本来的sheet名)
PERFORM f_copy_worksheet USING g_excel '实时项目编码描述表' '这是拷贝的新SHEET名称' CHANGING g_sheet.

* 新增一个sheet
PERFORM f_addnew_worksheet USING g_excel '这是新增的新SHEET名称' CHANGING g_sheet.

* 打开sheet页-设置活动的sheet页    实时项目编码描述表(sheet名)
PERFORM f_open_sheet USING '实时项目编码描述表' CHANGING g_excel g_wbook g_sheet.

* 填充数据
PERFORM f_fill_cell USING 2 2 'TEST' CHANGING g_excel .

* 关闭退出OLE
PERFORM f_close_file CHANGING g_excel sy-subrc.



INCLUDE zexcel.

ZEXCEL
以下均为主程序跳转具体代码。zexcel 这个包含程序可以重复使用

*&---------------------------------------------------------------------*
*&  包括                ZEXCEL
*&---------------------------------------------------------------------*
TYPE-POOLS abap.

INCLUDE ole2incl.

*&---------------------------------------------------------------------*
*&      Form  FRM_PROCESS_DICATOR
*&---------------------------------------------------------------------*
*       显示程序处理进度
*----------------------------------------------------------------------*
*    -->PL_TEXT      :信息文本
*    -->PL_PERCENTAGE:显示百分比
*----------------------------------------------------------------------*
FORM f_process_indcator USING pl_text       TYPE string
                              pl_percentage TYPE n.

* 显示程序处理进度
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      percentage = pl_percentage
      text       = pl_text.

ENDFORM.                    "FRM_PROCESS_DICATOR
*&---------------------------------------------------------------------*
*&      Form  FRM_DOWNLOAD_EXCEL_FROMSERVER
*&---------------------------------------------------------------------*
*       从服务器下载模板
*----------------------------------------------------------------------*
*    -->PL_OBJID:模板名称
*    -->PL_DEST:模板的保存路径
*----------------------------------------------------------------------*
FORM f_download_excel_fromserver USING pl_objid TYPE wwwdatatab-objid
                                       pl_dest  TYPE rlgrap-filename.

  DATA: l_objdata LIKE wwwdatatab,
        l_mime    LIKE w3mime,
        l_objnam  TYPE string,
        l_rc      LIKE sy-subrc,
        l_errtxt  TYPE string.

  CONCATENATE pl_objid '.XLS' INTO l_objnam.
  CONDENSE l_objnam NO-GAPS.

* 检查模板是否存在
  SELECT SINGLE relid objid FROM wwwdata
    INTO (l_objdata-relid, l_objdata-objid)
    WHERE srtf2    = 0
      AND relid    = 'MI'
      AND objid    = pl_objid.

* 模板不存在
  IF sy-subrc <> 0 OR l_objdata-objid = space.
    MESSAGE e002(zfico) WITH l_objnam.
  ENDIF.

* 下载模板到指定路径
  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      key         = l_objdata
      destination = pl_dest
    IMPORTING
      rc          = l_rc.

* 下载模板失败
  IF l_rc <> 0.
    MESSAGE e001(zfico) WITH l_objnam.
  ENDIF.

ENDFORM.                    "FRM_DOWNLOAD_EXCEL_FROMSERVER
*&---------------------------------------------------------------------*
*&      Form  FRM_CLEARDATA
*&---------------------------------------------------------------------*
*&      清除区域内容
*----------------------------------------------------------------------*
*    -->PL_TOP   :起始单元格所在的行
*    -->PL_LEFT  :起始单元格所在的列
*    -->PL_RIGHT :结束单元格所在的行
*    -->PL_BUTTOM:结束单元格所在的行
*    <--PL_SHEET :当前操作的Sheet页
*----------------------------------------------------------------------*
FORM f_cleardata USING    pl_top    TYPE i
                          pl_left   TYPE i
                          pl_right  TYPE i
                          pl_buttom TYPE i
                 CHANGING pl_sheet  TYPE ole2_object.

  DATA l_range TYPE ole2_object.

* 选择一个excel RANGE
  PERFORM f_selectrange USING    pl_left
                                 pl_top
                                 pl_right
                                 pl_buttom
                                 pl_sheet
                        CHANGING l_range.

* 清空所选中范围的内容
  CALL METHOD OF l_range 'ClearContents'.

ENDFORM.                    "FRM_CLEARDATA
*&---------------------------------------------------------------------*
*&      Form  FRM_PREVIEW
*&---------------------------------------------------------------------*
*&      打印预览
*&---------------------------------------------------------------------*
*  -->PL_SHEET          :当前操作的Sheet页
*  <--PL_APPLICATION:Excel进程
*----------------------------------------------------------------------*
FORM f_preview USING    pl_sheet       TYPE ole2_object
               CHANGING pl_application TYPE ole2_object.
* 设置Excel进程可见
  SET PROPERTY OF pl_application 'VISIBLE' = 1.

* 打印预览
  CALL METHOD OF pl_sheet 'PrintPreview'.

ENDFORM.                    "FRM_PREVIEW
*&----
  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值