一、ole相關內容
OLE(Object Linking & Embedding【對象鏈接與嵌入技術】),對Excel輸出格式有特殊要求時使用,但是導出較慢
OLE配置 Table : TOLE , OLELOAD(存儲了所有ole相關的關鍵字)
T-code : SOLE(ole配置視圖) ,OLE(ole範例)
二、OLE實現方式
數據定義-> 創建Excel對象->保存Excel對象-> 創建Excel工作頁面->在workbook中添加worksheet->對單元格的操作->顯示
通過Excel 宏來查看關鍵字
三、OLE的實現
1)ole數據定義
TYPE-POOLS: OLE2 .
DATA: GV_EXCEL TYPE OLE2_OBJECT,
GV_SHEET TYPE OLE2_OBJECT,
GV_WORKBOOKS TYPE OLE2_OBJECT,
GV_CELL TYPE OLE2_OBJECT,
GV_FONT TYPE OLE2_OBJECT,
GV_RANGE TYPE OLE2_OBJECT,
GV_COLOR TYPE OLE2_OBJECT,
GV_COLUMNS TYPE OLE2_OBJECT ,
GV_BORDER TYPE OLE2_OBJECT
.
DEFINE __ADD_CELL.
* get cell position
CALL METHOD OF GV_EXCEL 'CELLS' = GV_CELL
EXPORTING
#1 = &1
#2 = &2 .
* set value in cell
SET PROPERTY OF GV_CELL 'VALUE' = &3 .
*set call style
CALL METHOD OF GV_CELL 'FONT' = GV_FONT .
SET PROPERTY OF GV_FONT 'BOLD' = &4.
SET PROPERTY OF GV_FONT 'SIZE' = &5 .
IF &6 = GC_X.
SET PROPERTY OF GV_CELL 'HORIZONTALALIGNMENT' = -4108 .
ENDIF.
END-OF-DEFINITION.
2) OLE數據錄入
FORM CALL_OLE .
DATA LV_ROW TYPE I VALUE 3.
DATA LV_TEMP TYPE N LENGTH 5 VALUE 3.
DATA LV_FIELD TYPE N LENGTH 10.
FIELD-SYMBOLS :<FS_FILED> TYPE ANY .
* CREATE EXCEL OBJECT
CREATE OBJECT GV_EXCEL 'EXCEL.APPLICATION'.
SET PROPERTY OF GV_EXCEL 'VISIBLE' = 0. " 1 / 0
* ADD A NEW WORK
CALL METHOD OF GV_EXCEL 'WORKBOOKS' = GV_WORKBOOKS .
CALL METHOD OF GV_WORKBOOKS 'ADD'.
* CALL METHOD OF GV_EXCEL 'ACTIVATE'.
__ADD_CELL: 1 1 'alibaba 招聘簡章' 1 22 'X' .
* MERGECELLS
SET PROPERTY OF GV_CELL 'HORIZONTALALIGNMENT' = -4108 . "CENTER
CALL METHOD OF GV_EXCEL 'RANGE' = GV_RANGE
EXPORTING
#1 = 'A1'
#2 = 'J2'.
CALL METHOD OF GV_RANGE 'SELECT' .
SET PROPERTY OF GV_RANGE 'MERGECELLS' = 1 .
__ADD_CELL: 3 1 '公司發佈編碼' 1 12 'X' .
__ADD_CELL: 3 2 '公司編碼' 1 12 'X' .
__ADD_CELL: 3 3 '公司名稱' 1 12 'X' .
__ADD_CELL: 3 4 '公司地址' 1 12 'X' .
__ADD_CELL: 3 5 '郵箱' 1 12 'X' .
__ADD_CELL: 3 6 '崗位需求' 1 12 'X' .
__ADD_CELL: 3 7 '你崗位需求量' 1 12 'X' .
__ADD_CELL: 3 8 '薪資' 1 12 'X' .
__ADD_CELL: 3 9 '必要要求' 1 12 'X' .
__ADD_CELL: 3 10 '工作地點' 1 12 'X' .
LOOP AT GT_COMPANY .
LV_ROW = LV_ROW + SY-INDEX .
DO 10 TIMES.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE GT_COMPANY TO <FS_FILED> .
__ADD_CELL: LV_ROW SY-INDEX <FS_FILED> 0 12 'X' .
IF SY-INDEX = 7.
CALL METHOD OF GV_CELL 'INTERIOR' = GV_COLOR .
SET PROPERTY OF GV_COLOR 'COLORINDEX' = 6. " SET COLOR
ENDIF.
* DO 4 TIMES. " SET CELL BORDER
* CALL METHOD OF GV_CELL 'BORDERS' = GV_BORDER
* EXPORTING #1 = SY-INDEX.
*
* SET PROPERTY OF GV_BORDER 'LINESTYLE' = 1 .
* SET PROPERTY OF GV_BORDER 'WEIGHT' = 2 .
* ENDDO.
ENDDO.
ENDLOOP.
CALL METHOD OF GV_EXCEL 'COLUMNS' = GV_COLUMNS . "AUTO OLUMENS
CALL METHOD OF GV_COLUMNS 'AUTOFIT'.
"SELECT ALL CELL, YOU WILL ADD BORDERS
LV_TEMP = LV_ROW .
CONDENSE LV_TEMP NO-GAPS .
CONCATENATE 'J' LV_TEMP INTO LV_FIELD .
CALL METHOD OF GV_EXCEL 'RANGE' = GV_RANGE
EXPORTING
#1 = 'A1'
#2 = LV_FIELD.
CALL METHOD OF GV_RANGE 'SELECT' .
DO 4 TIMES. " ALL BORDERS
CALL METHOD OF GV_RANGE 'BORDERS' = GV_BORDER
EXPORTING #1 = SY-INDEX.
SET PROPERTY OF GV_BORDER 'LINESTYLE' = 1 .
SET PROPERTY OF GV_BORDER 'WEIGHT' = 2 .
ENDDO.
PERFORM SAVE_EXCEL .
ENDFORM.
3) 保存表單
FORM SAVE_EXCEL .
DATA LV_FNAME(255) .
LV_FNAME = 'E:\OLETEST_XLS'.
* SAVEAS SHEET
GET PROPERTY OF GV_EXCEL 'ActiveSheet' = GV_SHEET .
CALL METHOD OF GV_SHEET 'SAVEAS'
EXPORTING
#1 = LV_FNAME
#2 = 1 .
* FREE OBJECT GV_SHEET .
*
* GET PROPERTY OF GV_EXCEL 'ActiveWorkbook' = GV_WORKBOOKS .
* CALL METHOD OF GV_WORKBOOKS 'SAVE'.
* CLOSE EXCEL
CALL METHOD OF GV_EXCEL 'QUIT' .
FREE OBJECT GV_SHEET.
FREE OBJECT GV_WORKBOOKS.
FREE OBJECT GV_EXCEL .
IF SY-SUBRC EQ 0 .
MESSAGE 'SUCESS' TYPE 'S' .
ENDIF.
ENDFORM.
輸出效果
四、 此外還可以通過上傳模板的方式,直接利用模板做輸出
smw0上傳模板->獲取模板->ole打開->修改需要字段
1)獲取模板
FORM GET_MODE .
TABLES WWWDATA .
DATA LV_DEFAULT_FILENAME TYPE STRING VALUE 'ZSTUDENT_MODE'.
DATA LV_FILENAME TYPE STRING .
DATA LV_PATH TYPE STRING .
DATA LV_FULLPATH TYPE STRING .
DATA LV_MSG TYPE STRING .
DATA LO_OBJID TYPE WWWDATATAB .
DATA LV_DESTINATION TYPE RLGRAP-FILENAME .
DATA LV_RC TYPE SY-SUBRC .
DATA: LV_OBJID TYPE WWWDATATAB-OBJID,
LV_DEST TYPE SAPB-SAPPFAD.
LV_OBJID = 'ZSTUDENT'.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
* WINDOW_TITLE =
DEFAULT_EXTENSION = 'xls'
DEFAULT_FILE_NAME = LV_DEFAULT_FILENAME
* WITH_ENCODING =
* FILE_FILTER =
* INITIAL_DIRECTORY =
* PROMPT_ON_OVERWRITE = 'X'
CHANGING
FILENAME = LV_FILENAME
PATH = LV_PATH
FULLPATH = LV_FULLPATH
* USER_ACTION =
* FILE_ENCODING =
* EXCEPTIONS
* CNTL_ERROR = 1
* ERROR_NO_GUI = 2
* NOT_SUPPORTED_BY_GUI = 3
* INVALID_DEFAULT_FILE_NAME = 4
* OTHERS = 5
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
MESSAGE S030(ZGJX) WITH 'open error'.
* & & & &
ENDIF.
CHECK SY-SUBRC EQ 0 .
LV_DEST = LV_FULLPATH .
SELECT SINGLE RELID OBJID
FROM WWWDATA
INTO CORRESPONDING FIELDS OF LO_OBJID
WHERE SRTF2 = 0 AND RELID = 'MI' AND OBJID = LV_OBJID .
IF SY-SUBRC <> 0 OR LO_OBJID-OBJID EQ '' .
CONCATENATE 'The Mode File, ' LV_DEFAULT_FILENAME 'is null'
INTO LV_MSG .
MESSAGE LV_MSG TYPE 'I'.
ENDIF.
LV_DESTINATION = LV_DEST .
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
KEY = LO_OBJID
DESTINATION = LV_DESTINATION
IMPORTING
RC = LV_RC
* CHANGING
* TEMP =
.
IF LV_RC NE 0 .
CONCATENATE 'THE MODE FILE, ' LV_DEFAULT_FILENAME 'DOWNLOAD FAILED'
INTO LV_MSG .
MESSAGE LV_MSG TYPE 'E'.
ENDIF.
GV_FILENAME = LV_DESTINATION .
ENDFORM.
2)給每一行添加數據
FORM ADD_DATA .
CREATE OBJECT GV_EXCEL 'EXCEL.APPLICATION'.
IF SY-SUBRC <> 0.
EXIT .
ENDIF.
*
SET PROPERTY OF GV_EXCEL 'VISIBLE' = 1.
*
** OPEN MODE EXCEL
CALL METHOD OF GV_EXCEL 'WORKBOOKS' = GV_WORKBOOKS .
CALL METHOD OF GV_WORKBOOKS 'OPEN'
EXPORTING
#1 = GV_FILENAME.
CALL METHOD OF GV_EXCEL 'SHEETS' = GV_SHEET
EXPORTING
#1 = 1 .
CALL METHOD OF GV_SHEET 'SELECT' .
CALL METHOD OF GV_SHEET 'ACTIVATE' .
LOOP AT GT_MAIN INTO <FS_MAIN>.
GV_INDEX = SY-SUBRC + 2.
IF SY-TABIX EQ 1.
PERFORM EXCEL_ROW_INSERT USING GV_SHEET .
ENDIF.
DO '列數' TIMES.
"賦值
ENDDO.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form EXCEL_ROW_INSERT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GV_SHEET text
* -->P_1 text
*----------------------------------------------------------------------*
FORM EXCEL_ROW_INSERT USING PV_SHEET
.
DATA LV_RANGE TYPE OLE2_OBJECT .
DATA LV_BORDERS TYPE OLE2_OBJECT .
CALL METHOD OF PV_SHEET 'ROWS' = LV_RANGE
EXPORTING
#1 = 2 .
CALL METHOD OF LV_RANGE 'COPY'.
CALL METHOD OF PV_SHEET 'ROWS' = LV_RANGE
EXPORTING
#1 = GV_INDEX .
CALL METHOD OF LV_RANGE 'INSERT'.
CALL METHOD OF LV_RANGE 'CLEARCONTENTS'.
ENDFORM.