*&---------------------------------------------------------------------*
*& Report ZCESHI_22
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZCESHI_22.
*report ZLUPING05
* no standard page heading line-size 255.
*&---------------------------------------------------------------------*
*& Report ZTEST_OLE_EXCEL
*&
*&---------------------------------------------------------------------*
*& 测试OLE EXCEL
*&---------------------------------------------------------------------*
*REPORT ZTEST_OLE_EXCEL
* MESSAGE-ID ZTEST.
*&---------------------------------------------------------------------*
*& TYPE-POOLS
*&---------------------------------------------------------------------*
TYPE-POOLS:
OLE2. "或者:INCLUDE OLE2INCL
*&---------------------------------------------------------------------*
*& 定义数据
*&---------------------------------------------------------------------*
DATA:
TD_BKPF TYPE TABLE OF BKPF WITH HEADER LINE,
TH_BKPF TYPE BKPF.
DATA:
W_TMP_FILE(65) TYPE C.
* OLE2对象
DATA:
W_EXCEL TYPE OLE2_OBJECT, "EXCEL
W_BOOKS TYPE OLE2_OBJECT, "LIST OF WORKBOOKS
W_BOOK TYPE OLE2_OBJECT, "WORKBOOK
W_SHEET TYPE OLE2_OBJECT, "SHEET
W_CELL TYPE OLE2_OBJECT. "CELL OF SHEET
CONSTANTS:
* 前面一定要添加'MI'
CNS_DOWN_KEY TYPE WWWDATATAB VALUE 'MIZTSTOLE_EXCEL',
CNS_DOWN_PATH TYPE LOCALFILE VALUE 'C:\ZTST_TMP.XLT', "下载地址
* 部分字符串
CNS_VISIBLE TYPE CHAR32 VALUE 'VISIBLE',
CNS_WORKBOOKS TYPE CHAR32 VALUE 'WORKBOOKS',
CNS_OPEN TYPE CHAR32 VALUE 'OPEN',
CNS_WORKSHEETS TYPE CHAR32 VALUE 'WORKSHEETS',
CNS_ACTIVATE TYPE CHAR32 VALUE 'ACTIVATE',
CNS_RANGE TYPE CHAR32 VALUE 'RANGE',
CNS_VALUE TYPE CHAR32 VALUE 'VALUE'.
DATA: l_fname LIKE rlgrap-filename.
*&---------------------------------------------------------------------*
*& 选择屏幕
*&---------------------------------------------------------------------*
PARAMETERS:
P_BUKRS TYPE BKPF-BUKRS , "公司代码
P_GJAHR TYPE BKPF-GJAHR . "会计年度
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
* 取得数据
PERFORM FRM_GET_BKPF_DATA.
*-从SAP服务器上下载模板(要先通过SMWO上传)
PERFORM FRM_DOWN_TEMPLATE CHANGING l_fname.
*-向EXCEL中填入数据,并显示出来
PERFORM FRM_EXPORT_DATA.
*&---------------------------------------------------------------------*
*& Form FRM_GET_BKPF_DATA
*&---------------------------------------------------------------------*
* 取得数据
*----------------------------------------------------------------------*
FORM FRM_GET_BKPF_DATA .
SELECT *
FROM BKPF
INTO TABLE TD_BKPF
WHERE BUKRS = P_BUKRS
AND GJAHR = P_GJAHR.
IF SY-SUBRC <> 0.
* MESSAGE S001 DISPLAY LIKE 'E'.
* LEAVE LIST-PROCESSING.
ENDIF.
Td_BKPF-bukrs = '1000'.
Td_BKPF-belnr = '188888888'.
APPEND TD_BKPF.
ENDFORM. " FRM_GET_BKPF_DATA
*&---------------------------------------------------------------------*
*& Form FRM_DOWN_TEMPLATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_DOWN_TEMPLATE CHANGING fname.
DATA:
LW_SUBRC TYPE SY-SUBRC.
* 显示进度
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = 0
TEXT = 'Download the template!'.
DATA: l_objdata LIKE wwwdatatab,
l_destination LIKE rlgrap-filename,
l_rc LIKE sy-subrc,
l_errtxt TYPE string.
SELECT SINGLE relid objid
FROM wwwdata
INTO CORRESPONDING FIELDS OF l_objdata
WHERE srtf2 = 0
AND relid = 'MI'
AND objid = 'ZZCFZB02'."'ZHJ88'.'ZZCFZB01' "此处为EXCEL模板名称
* 检查表wwwdata中是否存在所指定的模板文件
IF sy-subrc NE 0 OR
l_objdata-objid = space."如果不存在,则给出错误提示
CONCATENATE '保函交接模板文件' '不存在' INTO l_errtxt.
MESSAGE l_errtxt TYPE 'E'.
ENDIF.
l_destination = 'C:\保函交接单.XLS'.
** 下载sap服务器上的RFC模板(html)
* CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
* EXPORTING
* KEY = CNS_DOWN_KEY
* DESTINATION = CNS_DOWN_PATH
* IMPORTING
* RC = LW_SUBRC
* CHANGING
* TEMP = W_TMP_FILE.
DATA: l_fname LIKE rlgrap-filename,
l_filename TYPE string,
l_icount TYPE i,
l_irow TYPE i.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = l_objdata
destination = l_destination
* KEY = CNS_DOWN_KEY
* DESTINATION = CNS_DOWN_PATH
IMPORTING
rc = l_rc.
IF l_rc NE 0.
CONCATENATE '保函交接单模板文件:' l_destination '下载失败' INTO l_errtxt.
MESSAGE l_errtxt TYPE 'E'.
ENDIF.
IF LW_SUBRC <> 0.
* MESSAGE 'DOWNLOAD TEMPLATE FALL!' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
fname = l_destination.
ENDFORM. " FRM_DOWN_TEMPLATE
*&---------------------------------------------------------------------*
*& Form FRM_EXPORT_DATA
*&---------------------------------------------------------------------*
* 向EXCEL中填入数据,并显示出来
*----------------------------------------------------------------------*
FORM FRM_EXPORT_DATA .
DATA:
LW_H TYPE CHAR2,
LW_S TYPE CHAR2.
* 创建EXCEL
CREATE OBJECT W_EXCEL 'EXCEL.APPLICATION'.
SET PROPERTY OF W_EXCEL CNS_VISIBLE = 0.
* 设置可见
SET PROPERTY OF W_EXCEL CNS_VISIBLE = 1 NO FLUSH.
* 创建EXCEL的WORKSBOOKS
CALL METHOD OF W_EXCEL CNS_WORKBOOKS = W_BOOKS.
* 创建BOOK FOR WORKSBOOKS
CALL METHOD OF W_BOOKS CNS_OPEN = W_BOOK
EXPORTING
#1 = l_fname."CNS_DOWN_PATH.
CALL METHOD OF W_BOOK CNS_WORKSHEETS = W_SHEET
EXPORTING
#1 = 'Sheet1'.
CALL METHOD OF W_SHEET CNS_ACTIVATE.
* 输出到EXCEL
LW_S = '6'.
LOOP AT TD_BKPF. "INTO TH_BKPF.
LW_H = 'B'.
PERFORM FRM_FILL_CELL USING LW_H LW_S Td_BKPF-BUKRS.
LW_H = 'C'.
PERFORM FRM_FILL_CELL USING LW_H LW_S Td_BKPF-BELNR.
* LW_H = 'C'.
* PERFORM FRM_FILL_CELL USING LW_H LW_S TH_BKPF-GJAHR.
*
* LW_H = 'D'.
* PERFORM FRM_FILL_CELL USING LW_H LW_S TH_BKPF-BLART.
*
* LW_H = 'E'.
* PERFORM FRM_FILL_CELL USING LW_H LW_S TH_BKPF-BLDAT.
*
* LW_H = 'F'.
* PERFORM FRM_FILL_CELL USING LW_H LW_S TH_BKPF-BUDAT.
*
* LW_H = 'G'.
* PERFORM FRM_FILL_CELL USING LW_H LW_S TH_BKPF-MONAT.
*
* LW_H = 'H'.
* PERFORM FRM_FILL_CELL USING LW_H LW_S TH_BKPF-CPUDT.
*
* LW_H = 'I'.
* PERFORM FRM_FILL_CELL USING LW_H LW_S TH_BKPF-XBLNR.
*
* LW_H = 'J'.
* PERFORM FRM_FILL_CELL USING LW_H LW_S TH_BKPF-BKTXT.
LW_S = LW_S + 1.
ENDLOOP.
* 设置可见
SET PROPERTY OF W_EXCEL CNS_VISIBLE = 1 NO FLUSH.
FREE OBJECT:
W_EXCEL,
W_BOOKS,
W_BOOK,
W_SHEET,
W_CELL.
ENDFORM. " FRM_EXPORT_DATA
*&---------------------------------------------------------------------*
*& Form FRM_FILL_CELL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->i_H text
* -->i_S text
* -->i_value text
*----------------------------------------------------------------------*
FORM FRM_FILL_CELL USING VALUE(I_H)
VALUE(I_S)
VALUE(I_VALUE).
DATA:
LW_CELL TYPE CHAR4.
* 填充单元格(定位)
CONCATENATE I_H I_S INTO LW_CELL.
CALL METHOD OF W_SHEET CNS_RANGE = W_CELL
EXPORTING
#1 = LW_CELL.
* 插入值
SET PROPERTY OF W_CELL CNS_VALUE = I_VALUE.
ENDFORM. " FRM_FILL_CELL