使用事先做好的模板,上传至SAP,事务码SMW0,
回到报表开发中,得到保存路径(给用户自己选)
*选择保存路径
CALL METHOD cl_gui_frontend_services=>directory_browse
CHANGING
selected_folder = lv_selected_folder
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
ENDIF.
定义:
DATA: go_excel TYPE ole2_object,
go_workbook TYPE ole2_object,
go_sheet TYPE ole2_object.
DATA: lv_destination TYPE rlgrap-filename.
DATA: ls_key TYPE wwwdatatab.
* 首先下载模版
SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF ls_key WHERE relid = 'MI' AND objid = 'SMW0中上传模板的对象名称'.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = ls_key
destination = lv_destination.
* 打开模版
CREATE OBJECT go_excel 'EXCEL.APPLICATION'.
IF sy-subrc NE 0.
ENDIF.
SET PROPERTY OF go_excel 'VISIBLE' = 1.
CALL METHOD OF go_excel 'WORKBOOKS' = go_workbook.
CALL METHOD OF go_workbook 'OPEN'
EXPORTING
#1 = lv_destination.
CALL METHOD OF go_excel 'SHEETS' = go_sheet
EXPORTING
#1 = 1.
CALL METHOD OF go_sheet 'ACTIVATE'.
进行填值
PERFORM fill_range USING 1 1 gs_head-butxt. "公司名称
PERFORM excel_row_insert USING go_sheet lv_loop2 1 lv_loop2. "复制并插入一行
再填值
PERFORM fill_range USING lv_loop2 2 gs_output-matnr. "
最后关闭表格
PERFORM sub_excel_save. "关闭
更改颜色参考 https://www.cnblogs.com/ybinlog/p/13797312.html
附上PERFORM内容

*&---------------------------------------------------------------------* *& Form SUB_EXCEL_SAVE *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM sub_excel_save . GET PROPERTY OF go_excel 'ACTIVESHEET' = go_sheet. "获取活动SHEET FREE OBJECT go_sheet. FREE OBJECT go_workbook. GET PROPERTY OF go_excel 'ACTIVEWORKBOOK' = go_workbook. * SET PROPERTY OF go_excel 'VISIBLE' = 0. "是否显示EXCEL 此处显示不退出 CALL METHOD OF go_workbook 'SAVE'. CALL METHOD OF go_excel 'QUIT'. FREE OBJECT go_sheet. FREE OBJECT go_workbook. FREE OBJECT go_excel. ENDFORM. *&---------------------------------------------------------------------* *& Form FILL_RANGE *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* * -->P_1 text * -->P_1 text * -->P_GS_HEAD_BUTXT text *&---------------------------------------------------------------------* FORM fill_range USING VALUE(f_row) VALUE(f_col) VALUE(f_value). DATA: row TYPE i, col TYPE i, lo_cell TYPE ole2_object. row = f_row. col = f_col. CALL METHOD OF go_excel 'CELLS' = lo_cell EXPORTING #1 = row #2 = col. SET PROPERTY OF lo_cell 'VALUE' = f_value. ENDFORM. *&---------------------------------------------------------------------* *& Form EXCEL_ROW_INSERT *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* * -->P_GO_SHEET text * -->P_LV_LOOP2 text * -->P_1 text *&---------------------------------------------------------------------* FORM excel_row_insert USING lcobj_sheet lc_row lc_count lv_rowcopy. DATA lc_range TYPE ole2_object. DATA h_borders TYPE ole2_object. DO lc_count TIMES. CALL METHOD OF lcobj_sheet 'ROWS' = lc_range EXPORTING #1 = lv_rowcopy. CALL METHOD OF lc_range 'COPY'. "COPY第10行插入一个新行 CALL METHOD OF lcobj_sheet 'ROWS' = lc_range EXPORTING #1 = lc_row. CALL METHOD OF lc_range 'INSERT'. CALL METHOD OF lc_range 'CLEARCONTENTS'. "是否需要清空CELL ENDDO. ENDFORM.