1. 程式人生 > >SAP 將內表的資料匯出到本地xls檔案 abap例項 INCLUDE OLE2INCL

SAP 將內表的資料匯出到本地xls檔案 abap例項 INCLUDE OLE2INCL

*&---------------------------------------------------------------------* *&      Form  FRM_DOWNLOAD_DATA *&---------------------------------------------------------------------* *       下載資料到xls檔案 *----------------------------------------------------------------------* FORM FRM_DOWNLOAD_DATA .
  DATALV_EXCEL       TYPE OLE2_OBJECT,         LV_SHEET       TYPE OLE2_OBJECT,         LV_CELL        TYPE OLE2_OBJECT,         LV_WORKBOOK    TYPE OLE2_OBJECT,         LV_XLSNAME     TYPE STRING,         LV_LINE        TYPE I      VALUE 1"行號         LV_COLS        TYPE I      VALUE 0"行號         LW_ALVDATA     TYPE 
GTYP_ALVDATA. * 獲取下載檔案完整路徑   PERFORM GET_SAVE_PATH CHANGING LV_XLSNAME. * 啟動Excel   CREATE OBJECT LV_EXCEL 'EXCEL.APPLICATION'.   IF SY-SUBRC <> 0.     WRITE'啟動Excel失敗。'.     STOP.   ENDIF.   CALL METHOD OF       LV_EXCEL       'WORKBOOKS' LV_WORKBOOK. * 使excel 可視   SET PROPERTY OF LV_EXCEL 'VISIBLE'             
0. "0:不可視,1:可視   SET PROPERTY OF LV_EXCEL 'SHEETSINNEWWORKBOOK' 1.   "如果是讀取excel檔案中的內容 則是直接開啟工作簿第一頁   CALL METHOD OF       LV_WORKBOOK       'ADD'. * 例如:CALL *       METHOD OF EXCEL 'WORKSHEETS'  = SHEET  EXPORTING #1 = 1. *  CLEAR LV_LINE.   LOOP AT GT_ALVDATA INTO LW_ALVDATA.     LV_COLS 1. *   列名的設定     IF SY-TABIX 1. *     設定單元格(交貨)       PERFORM SET_EXCEL_CELL USING LV_EXCEL                                    LV_LINE                                    '交貨'                                    LV_COLS. *     設定單元格(物料號)       PERFORM SET_EXCEL_CELL USING LV_EXCEL                                    LV_LINE                                    '物料號'                                    LV_COLS. *     設定單元格(交貨日期)       PERFORM SET_EXCEL_CELL USING LV_EXCEL                                    LV_LINE                                    '交貨日期'                                    LV_COLS. *     設定單元格(實際已交貨量(按銷售單位))       PERFORM SET_EXCEL_CELL USING LV_EXCEL                                    LV_LINE                                    '實際已交貨量(按銷售單位)'                                    LV_COLS. *     設定單元格-列(售達方)       PERFORM SET_EXCEL_CELL USING LV_EXCEL                                    LV_LINE                                    '售達方'                                    LV_COLS. *     設定單元格-列(工廠)       PERFORM SET_EXCEL_CELL USING LV_EXCEL                                    LV_LINE                                    '工廠'                                    LV_COLS. *     設定單元格-列(銷售單價(SA中的單價))       PERFORM SET_EXCEL_CELL USING LV_EXCEL                                    LV_LINE                                    '銷售單價(SA中的單價)'                                    LV_COLS. *     設定單元格-列(銷售金額)       PERFORM SET_EXCEL_CELL USING LV_EXCEL                                    LV_LINE                                    '銷售金額'                                    LV_COLS. *     設定單元格-列(標準價格)       PERFORM SET_EXCEL_CELL USING LV_EXCEL                                    LV_LINE                                    '標準價格'                                    LV_COLS. *     設定單元格-列(標準成本總額)       PERFORM SET_EXCEL_CELL USING LV_EXCEL                                    LV_LINE                                    '標準成本總額'                                    LV_COLS. *     設定單元格-列(天數)       PERFORM SET_EXCEL_CELL USING LV_EXCEL                                    LV_LINE                                    '天數'                                    LV_COLS.     ENDIF.     LV_LINE LV_LINE + 1.   "Excel 中行號從1開始     LV_COLS 1. *   設定單元格(交貨)     PERFORM SET_EXCEL_CELL USING LV_EXCEL                                  LV_LINE                                  LW_ALVDATA-VBELN                                  LV_COLS. *   設定單元格(物料號)     PERFORM SET_EXCEL_CELL USING LV_EXCEL                                  LV_LINE                                  LW_ALVDATA-MATNR                                  LV_COLS. *   設定單元格(交貨日期)     PERFORM SET_EXCEL_CELL USING LV_EXCEL                                  LV_LINE                                  LW_ALVDATA-LFDAT                                  LV_COLS. *   設定單元格(實際已交貨量(按銷售單位))     PERFORM SET_EXCEL_CELL USING LV_EXCEL                                  LV_LINE                                  LW_ALVDATA-LFIMG                                  LV_COLS. *   設定單元格-列(售達方)     PERFORM SET_EXCEL_CELL USING LV_EXCEL                                  LV_LINE                                  LW_ALVDATA-KUNAG                                  LV_COLS. *   設定單元格-列(工廠)     PERFORM SET_EXCEL_CELL USING LV_EXCEL                                  LV_LINE                                  LW_ALVDATA-WERKS                                  LV_COLS. *   設定單元格-列(銷售單價(SA中的單價))     PERFORM SET_EXCEL_CELL USING LV_EXCEL                                  LV_LINE                                  LW_ALVDATA-KBETR                                  LV_COLS. *   設定單元格-列(銷售金額)     PERFORM SET_EXCEL_CELL USING LV_EXCEL                                  LV_LINE                                  LW_ALVDATA-SAL_AMOUNT                                  LV_COLS. *   設定單元格-列(標準價格)     PERFORM SET_EXCEL_CELL USING LV_EXCEL                                  LV_LINE                                  LW_ALVDATA-STPRS                                  LV_COLS. *   設定單元格-列(標準成本總額)     PERFORM SET_EXCEL_CELL USING LV_EXCEL                                  LV_LINE                                  LW_ALVDATA-SUM_AMOUNT                                  LV_COLS. *   設定單元格-列(天數)     PERFORM SET_EXCEL_CELL USING LV_EXCEL                                  LV_LINE                                  LW_ALVDATA-ATAGE                                  LV_COLS.   ENDLOOP.   GET PROPERTY OF LV_EXCEL 'ACTIVESHEET'    LV_SHEET.     "啟用工作簿   GET PROPERTY OF LV_EXCEL 'ACTIVEWORKBOOK' LV_WORKBOOK.  "啟用工作區   CALL METHOD OF       LV_WORKBOOK       'SAVEAS'     EXPORTING       #1          LV_XLSNAME       #2          1.   "將excel檔案儲存   CALL METHOD  OF LV_WORKBOOK 'CLOSE'.                  "關閉工作區   CALL METHOD OF       LV_EXCEL       'QUIT'.   "退出excel *WRITE:/ XLSNAME,'DONE'.   "退出成功,輸出done   FREE OBJECT LV_SHEET.                               "釋放操作   FREE OBJECT LV_WORKBOOK.   FREE OBJECT LV_EXCEL. ENDFORM.                    " FRM_DOWNLOAD_DATA *&---------------------------------------------------------------------* *&      Form  SET_EXCEL_CELL *&---------------------------------------------------------------------* *       設定單元格-列 *----------------------------------------------------------------------* *      -->P_IN_EXCEL     excel物件 *      -->P_IN_LINE      行號 *      -->P_IN_FIELD     專案 *      <--P_OUT_COLS     列號 *----------------------------------------------------------------------* FORM SET_EXCEL_CELL  USING  P_IN_EXCEL  TYPE OLE2_OBJECT                             P_IN_LINE   TYPE I                             P_IN_FIELD  TYPE ANY                             P_OUT_COLS  TYPE I.   DATALV_CELL   TYPE OLE2_OBJECT. * 指定單元格   CALL METHOD OF       P_IN_EXCEL       'CELLS'    LV_CELL     EXPORTING       #1         P_IN_LINE       #2         P_OUT_COLS. * 寫入值   SET  PROPERTY OF LV_CELL                    'VALUE' P_IN_FIELD.   P_OUT_COLS P_OUT_COLS + 1. ENDFORM.                    " SET_EXCEL_CELL *&---------------------------------------------------------------------* *&      Form  GET_SAVE_PATH *&---------------------------------------------------------------------* *       獲取下載檔案完整路徑 *----------------------------------------------------------------------* *      <--P_IN_PATH  text *----------------------------------------------------------------------* FORM GET_SAVE_PATH  CHANGING P_IN_PATH  TYPE STRING.   DATALV_FILENAME   TYPE STRING,         LV_PATH       TYPE STRING.   CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG     EXPORTING       WINDOW_TITLE         '下載檔案'       FILE_FILTER          '*.xls'     CHANGING       FILENAME             LV_FILENAME       PATH                 LV_PATH       FULLPATH             P_IN_PATH     EXCEPTIONS       CNTL_ERROR           1       ERROR_NO_GUI         2       NOT_SUPPORTED_BY_GUI 3       OTHERS               4.   IF SY-SUBRC <> 0. *   Implement suitable error handling here   ENDIF. ENDFORM.                    " GET_SAVE_PATH