在ALV中加入OLE报表

2 篇文章 0 订阅
1 篇文章 0 订阅

&———————————————————————
*& Report ZTEST_OLE_TEST
*&
&———————————————————————
*&
*&
&———————————————————————

REPORT ZTEST_OLE_TEST.
——————————————————————-
——————————————————————-
*Programe description:ole下载
*developer:刘鹏鹏
*date:2015.10.26
*FS:
*TS:
———————————————————————
*Modify:
——————————————————————
*programe VARIABLES
——————————————————————–

————————————————————-
*TYPE-POOLS
————————————————————-
TYPE-POOLS: OLE2.
TYPE-POOLS : ABAP,SLIS,ICON.
—————————————————————
*DATA DEFINATION
—————————————————————
DATA:LO_OBJDATA LIKE WWWDATATAB,
LO_MIME LIKE W3MIME,
LC_FILENAME TYPE STRING VALUE ‘TEST01’,”下载时的文件名字
LC_FULLPATH TYPE STRING, “下载的总路径
LC_PATH TYPE STRING,
LS_DESTINATION LIKE RLGRAP-FILENAME,
LS_OBJNAM TYPE STRING, “P_OBJID 加’.XLS’
LI_RC LIKE SY-SUBRC,
LS_ERRTXT TYPE STRING.
DATA:P_OBJID TYPE WWWDATATAB-OBJID,
P_DEST LIKE SAPB-SAPPFAD.
P_OBJID = ‘ZOLETEST’. “此处为EXCEL模板名称
DATA:V_EXCEL TYPE OLE2_OBJECT,
V_BOOK TYPE OLE2_OBJECT,
V_CELL TYPE OLE2_OBJECT,
V_SHEET TYPE OLE2_OBJECT.
——————————————————————
*INTERNAL TABLE
——————————————————————-
DATA:BEGIN OF I_OUT OCCURS 0,
WERKS TYPE WERKS_D,
NAME1 TYPE NAME1,
LGORT TYPE LGORT_D,
MATNR TYPE MATNR,
MAKTX TYPE MAKTX,
LABST TYPE LABST,
URL(100) TYPE C,
SEL(1) TYPE C,
ROWCOLOR(4) TYPE C ,
TRAFFIC_LIGHTS TYPE ICON_D,
END OF I_OUT.
DATA:BEGIN OF I_CREATE OCCURS 0,
WERKS TYPE WERKS_D,
NAME1 TYPE NAME1,
LGORT TYPE LGORT_D,
MATNR TYPE MATNR,
MAKTX TYPE MAKTX,
LABST TYPE LABST,
END OF I_CREATE.
DATA: FIELDCAT TYPE LVC_T_FCAT WITH HEADER LINE.
&———————————————————————
*& PROGRAM VARIABLES
&———————————————————————
DATA: WA_LAYOUT TYPE LVC_S_LAYO,
GT_EVENTS TYPE SLIS_T_EVENT,
GS_EVENT LIKE LINE OF GT_EVENTS.
DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID.
————————————————————–
*CONSTANTS
————————————————————–
DEFINE FILL_FIELD.
CLEAR FIELDCAT.
FIELDCAT-FIELDNAME = &1.
FIELDCAT-SCRTEXT_L = &2.
FIELDCAT-CFIELDNAME = &3.
FIELDCAT-OUTPUTLEN = &4.
FIELDCAT-EDIT = &5.
APPEND FIELDCAT.
END-OF-DEFINITION.
—————————————————————
*DEFINATION
—————————————————————

—————————————————————
*LOCAL CLASS DEFINITION
—————————————————————

—————————————————————
*INCLUDES
—————————————————————

—————————————————————
*Selection Screen
—————————————————————

—————————————————————
*INITIALIZATION
—————————————————————
INITIALIZATION.

—————————————————————
*AT SELECTION-SCREEN
—————————————————————
AT SELECTION-SCREEN.
—————————————————————
*Start-of-selection
—————————————————————
START-OF-SELECTION.
PERFORM FRM_GET_DATA.
—————————————————————
*end-of-selection
—————————————————————
END-OF-SELECTION.
IF I_OUT[] IS NOT INITIAL.
PERFORM FRM_DISPLAY_DATA.
ELSE.
MESSAGE ‘No suitable data was selected, please check your input’ TYPE ‘I’.
ENDIF.
&———————————————————————
*& Form FRM_GET_DATA
&———————————————————————
* text
———————————————————————-
* –> p1 text
* <– p2 text
———————————————————————-
FORM FRM_GET_DATA .
SELECT A~WERKS B~NAME1 A~LGORT A~MATNR C~MAKTX A~LABST
INTO CORRESPONDING FIELDS OF TABLE I_OUT
FROM MARD AS A
INNER JOIN T001W AS B ON A~WERKS = B~WERKS
INNER JOIN MAKT AS C ON A~MATNR = C~MATNR
WHERE A~WERKS = ‘1000’.
ENDFORM. ” FRM_GET_DATA
&———————————————————————
*& Form FRM_TEMP_EXCEL_GET
&———————————————————————
* text
———————————————————————-
* –> p1 text
* <– p2 text
———————————————————————-
FORM FRM_TEMP_EXCEL_GET .
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG”调用保存对话框
EXPORTING
* WINDOW_TITLE =
DEFAULT_EXTENSION = ‘XLS’ “下载模式
DEFAULT_FILE_NAME = LC_FILENAME “下载后的文件名字
* WITH_ENCODING =
* FILE_FILTER =
* INITIAL_DIRECTORY =
* PROMPT_ON_OVERWRITE = ‘X’
CHANGING
FILENAME = LC_FILENAME
PATH = LC_PATH
FULLPATH = LC_FULLPATH “最终路径
* USER_ACTION =
* FILE_ENCODING =
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF LC_FULLPATH = ”.
MESSAGE ‘不能打开excel!’ TYPE ‘E’.
ENDIF.
IF SY-SUBRC = 0.
P_DEST = LC_FULLPATH.
CONCATENATE P_OBJID ‘.XLS’ INTO LS_OBJNAM.
CONDENSE LS_OBJNAM NO-GAPS.
SELECT SINGLE RELID OBJID FROM WWWDATA INTO CORRESPONDING FIELDS OF LO_OBJDATA “从WWWDATA中取出RELID OBJID
WHERE SRTF2 = ‘0’ AND RELID = ‘MI’ AND OBJID = P_OBJID.
*检查表wwwdata中是否存在所指定的模板文件
IF SY-SUBRC NE 0 OR LO_OBJDATA-OBJID EQ SPACE.”如果不存在给出错误信息
CONCATENATE ‘模板文件’ LS_OBJNAM ‘不存在’ INTO LS_ERRTXT.
MESSAGE LS_ERRTXT TYPE ‘I’.
ENDIF.
LS_DESTINATION = P_DEST.”保存路径
*如果存在,调用DOWNLOAD_WEB_OBJECT 函数下载模板到路径下
CALL FUNCTION ‘DOWNLOAD_WEB_OBJECT’
EXPORTING
KEY = LO_OBJDATA
DESTINATION = LS_DESTINATION
IMPORTING
RC = LI_RC
* CHANGING
* TEMP =
.
IF LI_RC NE 0.
CONCATENATE ‘模板文件:’ ‘LS_OBJNAM’ ‘下载失败’ INTO LS_ERRTXT.
MESSAGE LS_ERRTXT TYPE ‘E’.
ENDIF.
ENDIF.
ENDFORM. ” FRM_TEMP_EXCEL_GET
&———————————————————————
*& Form FRM_OPEN_EXCEL
&———————————————————————
* text
———————————————————————-
* –>P_LC_FULLPATH text
———————————————————————-
FORM FRM_OPEN_EXCEL USING PA_FULLPATH.
CREATE OBJECT V_EXCEL ‘EXCEL.APPLICATION’.
SET PROPERTY OF V_EXCEL ‘VISIBLE’ = 0.
CALL METHOD OF V_EXCEL ‘WORKBOOKS’ = V_BOOK.
CALL METHOD OF V_BOOK ‘OPEN’ = V_BOOK
EXPORTING #1 = PA_FULLPATH.
IF SY-SUBRC <> 0.
MESSAGE ‘OPEN FILE FAILED’ TYPE ‘E’.
STOP.
ENDIF.
ENDFORM. ” FRM_OPEN_EXCEL
&———————————————————————
*& Form FRM_WRITE_EXCEL
&———————————————————————
* text
———————————————————————-
* –> p1 text
* <– p2 text
———————————————————————-
FORM FRM_WRITE_EXCEL .
DATA SN TYPE I.
PERFORM FRM_OPEN_EXCEL_SHEET USING 1.
PERFORM FILL_CELL USING 1 1 ‘当前商品可用库存状态’.
SN = 2.
PERFORM FILL_CELL USING SN 1 ‘地点’. “第几行 第几列 名称
PERFORM FILL_CELL USING SN 2 ‘地点名称’.
PERFORM FILL_CELL USING SN 3 ‘库位’.
PERFORM FILL_CELL USING SN 4 ‘物料’.
PERFORM FILL_CELL USING SN 5 ‘物料名称’.
PERFORM FILL_CELL USING SN 6 ‘当前库存’.
LOOP AT I_CREATE.
SN = SY-TABIX + 2.
PERFORM FILL_CELL USING SN 1 I_CREATE-WERKS. ” 第几行 第几列 对应数值
PERFORM FILL_CELL USING SN 2 I_CREATE-NAME1.
PERFORM FILL_CELL USING SN 3 I_CREATE-LGORT.
PERFORM FILL_CELL USING SN 4 I_CREATE-MATNR.
PERFORM FILL_CELL USING SN 5 I_CREATE-MAKTX.
PERFORM FILL_CELL USING SN 6 I_CREATE-LABST.
ENDLOOP.
ENDFORM. ” FRM_WRITE_EXCEL
&———————————————————————
*& Form FILL_CELL
&———————————————————————
* text
———————————————————————-
* –>P_SN text
* –>P_1 text
* –>P_GT_LIST_ORDER text
———————————————————————-
FORM FILL_CELL USING PA_ROW
PA_COL
PA_VAL.
CALL METHOD OF V_SHEET ‘Cells’ = V_CELL
EXPORTING
#1 = PA_ROW
#2 = PA_COL.
SET PROPERTY OF V_CELL ‘Value’ = PA_VAL.
ENDFORM. “FILL_CELL
&———————————————————————
*& Form FRM_OPEN_EXCEL_SHEET
&———————————————————————
* text
———————————————————————-
* –>P_1 text
———————————————————————-
FORM FRM_OPEN_EXCEL_SHEET USING PA_SHEET_NUMBER.
CALL METHOD OF V_BOOK ‘Sheets’ = V_SHEET
EXPORTING
#1 = PA_SHEET_NUMBER.
CALL METHOD OF V_SHEET ‘Activate’.
ENDFORM. “FRM_OPEN_EXCEL_SHEET
&———————————————————————
*& Form frm_save_excel
&———————————————————————
* text
———————————————————————-
* –>P_LC_FULLPATH text
———————————————————————-
FORM FRM_SAVE_EXCEL USING PA_FULLPATH.
SET PROPERTY OF V_EXCEL ‘DisplayAlerts’ = 0.
CALL METHOD OF V_BOOK ‘SAVEAS’
EXPORTING
#1 = PA_FULLPATH.
* call method of v_book ‘Exit’ = v_book.
* call method of v_book ‘Close’.
CALL METHOD OF V_EXCEL ‘Quit’.
FREE OBJECT V_EXCEL.
FREE OBJECT V_BOOK.
FREE OBJECT V_SHEET.
ENDFORM. ” frm_save_excel
&———————————————————————
*& Form FRM_DISPLAY_DATA
&———————————————————————
* text
———————————————————————-
* –> p1 text
* <– p2 text
———————————————————————-
FORM FRM_DISPLAY_DATA .
PERFORM FRM_LAYOUT.
PERFORM FRM_FILL_FIELD.
PERFORM FRM_BUILD_EVENT.
PERFORM FRM_ALV_DISPLAY.
ENDFORM. ” FRM_DISPLAY_DATA
&———————————————————————
*& Form FRM_LAYOUT
&———————————————————————
* text
———————————————————————-
* –> p1 text
* <– p2 text
———————————————————————-
FORM FRM_LAYOUT .
CLEAR: WA_LAYOUT.”它用来定义ALV报表的整体属性
* WA_LAYOUT-ZEBRA = ‘X’ .”ZBbra
* WA_LAYOUT-DETAILINIT = ‘X’ . “initial values on detail screen
WA_LAYOUT-CWIDTH_OPT = ‘X’.”优化列宽选项是否设置
* WA_LAYOUT-DETAILTITL = ‘Detail Information’ .”设置弹出窗口的标题栏
WA_LAYOUT-BOX_FNAME = ‘SEL’.
* WA_LAYOUT-INFO_FNAME = ‘ROWCOLOR’.
* WA_LAYOUT-GRID_TITLE = ‘Alv grid title test’.
ENDFORM. ” FRM_LAYOUT
&———————————————————————
*& Form FRM_FILL_FIELD
&———————————————————————
* text
———————————————————————-
* –> p1 text
* <– p2 text
———————————————————————-
FORM FRM_FILL_FIELD .
FILL_FIELD:’WERKS’ ‘地点’ ” ‘10’ ”,
‘NAME1’ ‘地点名称’ ” ‘14’ ”,
‘LGORT’ ‘库位’ ” ‘14’ ”,
‘MATNR’ ‘物料’ ” ‘14’ ”,
‘MAKTX’ ‘物料名称’ ” ‘14’ ”,
‘LABST’ ‘当前库存’ ” ‘14’ ”.
ENDFORM. ” FRM_FILL_FIELD
&———————————————————————
*& Form FRM_BUILD_EVENT
&———————————————————————
* text
———————————————————————-
* –> p1 text
* <– p2 text
———————————————————————-
FORM FRM_BUILD_EVENT .
REFRESH:GT_EVENTS.
CALL FUNCTION ‘REUSE_ALV_EVENTS_GET’
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = GT_EVENTS.

GS_EVENT-NAME = SLIS_EV_PF_STATUS_SET.
GS_EVENT-FORM = ‘PF_STATUS’.
APPEND GS_EVENT TO GT_EVENTS.
CLEAR GS_EVENT.
ENDFORM. ” FRM_BUILD_EVENT
&———————————————————————
*& Form pf_status
&———————————————————————
* text
———————————————————————-
* –>LT_EXTAB text
———————————————————————-
FORM PF_STATUS USING LT_EXTAB. “#EC NEEDED
SET PF-STATUS ‘MENU’.”SAPLKKBL STANDARD
ENDFORM. “PF_STATUS
&———————————————————————
*& Form FRM_ALV_DISPLAY
&———————————————————————
* text
———————————————————————-
* –> p1 text
* <– p2 text
———————————————————————-
FORM FRM_ALV_DISPLAY .
DATA: IS_VARIANT LIKE DISVARIANT,
I_GRID_SETTINGS TYPE LVC_S_GLAY.
* I_GRID_SETTINGS-EDT_CLL_CB = ‘X’.
* IS_VARIANT-VARIANT = P_VARI.
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
* I_GRID_SETTINGS = I_GRID_SETTINGS
IT_FIELDCAT_LVC = FIELDCAT[]
IT_EVENTS = GT_EVENTS
* IS_VARIANT = IS_VARIANT
I_SAVE = ‘A’
* I_DEFAULT = ‘X’
IS_LAYOUT_LVC = WA_LAYOUT
* I_GRID_TITLE = ‘Alv test-FM’
I_CALLBACK_USER_COMMAND = ‘USER_COMMAND’
TABLES
T_OUTTAB = I_OUT
EXCEPTIONS
OTHERS = 2.
ENDFORM. ” FRM_ALV_DISPLAY
&———————————————————————
*& Form user_command
&———————————————————————
* text
———————————————————————-
* –>UCOMM text
* –>RS_SELFIELD text
———————————————————————-
FORM USER_COMMAND USING UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD. “#EC CALLED
DATA: L_LINE TYPE I,
L_INDEX TYPE I.
DATA: L_VALID TYPE CHAR01.
CASE UCOMM.
WHEN ‘CREATE’.
CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
IMPORTING
E_GRID = G_GRID.
CALL METHOD G_GRID->CHECK_CHANGED_DATA
IMPORTING
E_VALID = L_VALID.
IF L_VALID IS INITIAL.
EXIT.
ENDIF.
REFRESH I_CREATE.
LOOP AT I_OUT.
IF I_OUT-SEL = ‘X’.
MOVE-CORRESPONDING I_OUT TO I_CREATE.
APPEND I_CREATE.
CLEAR I_CREATE.
ENDIF.
ENDLOOP.
PERFORM FRM_TEMP_EXCEL_GET.
IF LC_FULLPATH IS NOT INITIAL.
PERFORM FRM_OPEN_EXCEL USING LC_FULLPATH.
PERFORM FRM_WRITE_EXCEL.
PERFORM FRM_SAVE_EXCEL USING LC_FULLPATH.
ENDIF.
ENDCASE.
RS_SELFIELD-REFRESH = ‘X’.
RS_SELFIELD-COL_STABLE = ‘X’.
RS_SELFIELD-ROW_STABLE = ‘X’.
ENDFORM. “user_command

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值