版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_16635325/article/details/81135810
将内表保存到剪贴板,然后将剪贴板的数据粘贴到EXCEL
步骤和解决的问题:
- 用SWM0上传文档模版
- 下载模版文件到本地
DATA: lv_objdata LIKE wwwdatatab,
lv_errtxt TYPE string,
lv_destination LIKE rlgrap-filename,
lv_rc LIKE sy-subrc.
lv_destination = gv_fullpath.
SELECT SINGLE relid objid FROM wwwdata
INTO CORRESPONDING FIELDS OF lv_objdata
WHERE srtf2 = 0
AND relid = 'MI'
AND objid = 'ZWMP154'.
IF sy-subrc NE 0 OR lv_objdata-objid EQ space.
lv_errtxt = '模板文件:ZWMP154不存在,请用TCODE:SMW0进行加载' .
MESSAGE e000(su) WITH lv_errtxt.
ENDIF.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = lv_objdata
destination = lv_destination
IMPORTING
rc = lv_rc.
IF lv_rc NE 0.
CONCATENATE '模板文件' '下载失败' INTO lv_errtxt.
MESSAGE e000(su) WITH lv_errtxt.
ENDIF.
3. 通过OLE打开模版并写入数据
CREATE OBJECT excel 'EXCEL.APPLICATION'.
IF sy-subrc <> 0.
WRITE: 'error'.
STOP.
ENDIF.
* 设置excel是否显示,0 不显示,1显示
SET PROPERTY OF excel 'VISIBLE' = 1.
CALL METHOD OF excel 'Workbooks' = workbook.
CALL METHOD OF workbook 'Open'
EXPORTING
#1 = lv_destination.
GET PROPERTY OF excel 'ACTIVECELL' = sheet.
CALL METHOD OF excel 'Worksheets' = sheet
EXPORTING
#1 = 'Sheet1'. "#EC NOTEXT " 根据实际 excel table页, 要改
CALL METHOD OF sheet 'Activate'.
4.调用剪贴板,将内表数据保存到剪贴板,然后粘贴到EXCEL
注意:工作区字段用制表符 cl_abap_char_utilities=>horizontal_tab 分割
"指定复制位置
r1 = 2.
r2 = 1.
PERFORM frm_paste_clipboard_to_ole USING r1 r2 sheet cell.
FORM frm_paste_clipboard_to_ole USING p_row TYPE i
p_col TYPE i
p_sheet
p_cell.
DATA lv_rc TYPE i.
DATA lv_type TYPE c.
FIELD-SYMBOLS <lv_field>.
DATA: BEGIN OF lw_char,
line(2200) TYPE c,
END OF lw_char.
DATA lt_char LIKE TABLE OF lw_char.
DATA lt_char2 LIKE TABLE OF lw_char."将剪贴板原来的数据拷贝出来
cl_gui_frontend_services=>clipboard_import(
IMPORTING
data = lt_char2 " Data Table
* length = " Data length
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4
).
* Copy to clipboard into ABAP
CALL FUNCTION 'CONTROL_FLUSH'
EXCEPTIONS
OTHERS = 3.
DESCRIBE FIELD gw_download TYPE lv_type COMPONENTS lv_rc.
LOOP AT gt_download INTO gw_download.
CLEAR lw_char-line.
DO lv_rc TIMES.
ASSIGN COMPONENT sy-index OF STRUCTURE gw_download TO <lv_field>.
CONCATENATE lw_char-line <lv_field> cl_abap_char_utilities=>horizontal_tab INTO lw_char-line.
ENDDO.
APPEND lw_char TO lt_char.
ENDLOOP.
cl_gui_frontend_services=>clipboard_export(
EXPORTING
no_auth_check = 'X' " Switch off Check for Access Rights
IMPORTING
data = lt_char " Data
CHANGING
rc = lv_rc " Return Code
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
no_authority = 4
OTHERS = 5
).
* Select the cell A1
CALL METHOD OF p_sheet 'Cells' = p_cell
EXPORTING
#1 = p_row
#2 = p_col.
* Paste clipboard from cell A1
CALL METHOD OF p_cell 'SELECT'.
CALL METHOD OF p_sheet 'PASTE'.
CALL METHOD OF p_sheet 'Cells' = p_cell
EXPORTING
#1 = p_row
#2 = p_col.
CALL METHOD OF p_cell 'SELECT'."取消全选
cl_gui_frontend_services=>clipboard_export(
EXPORTING
no_auth_check = 'X' " Switch off Check for Access Rights
IMPORTING
data = lt_char2 " Data
CHANGING
rc = lv_rc " Return Code
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
no_authority = 4
OTHERS = 5
).
ENDFORM. " PASTE_CLIPBOARD
5.保存释放EXCEL
GET PROPERTY OF excel 'ACTIVEWORKBOOK' = workbook.
*
*
CALL METHOD OF
workbook
'SAVE'.
* EXPORTING
* #1 = gv_fullpath "'d:\fuck.xlsx' "fn1
* #2 = 1.
*
* CALL METHOD OF
* workbook
* 'CLOSE'.
*
* CALL METHOD OF
* excel
* 'QUIT'.
*
*WRITE 'SUCCESS'.
*
FREE OBJECT sheet.
FREE OBJECT workbook.
FREE OBJECT excel.