效果图
第一个sheet页:
第二个sheet页:
废话不多说,直接运行程序。有个结构需要建一下
主程序
定义变量
*&---------------------------------------------------------------------*
*& 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
*&----------------