SAP導出內表數據到excel

DATA: EXCEL    TYPE OLE2_OBJECT,
      SHEET    TYPE OLE2_OBJECT,
      CELL     TYPE OLE2_OBJECT,
      WORKBOOK TYPE OLE2_OBJECT,

      XLSNAME  TYPE STRING VALUE 'C:\sap_usr02.xls',
      LINE     TYPE VALUE 0"行號

CREATE OBJECT EXCEL 'EXCEL.APPLICATION'."啓動Excel

IF SY-SUBRC NE 0.
  WRITE: / '啓動Excel失敗。'.
  STOP.
ENDIF.

CALL METHOD  OF EXCEL 'WORKBOOKS' = WORKBOOK.
SET PROPERTY OF EXCEL 'VISIBLE'   1.       "使excel 可視

SET  PROPERTY OF EXCEL    'SHEETSINNEWWORKBOOK' 1.        "若是是讀取excel文件中的內容 則是直接打開工做簿第一頁
CALL METHOD   OF WORKBOOK 'ADD'.                            "例如:CALL METHOD OF EXCEL 'WORKSHEETS'  = SHEET  EXPORTING #1 = 1.

LOOP AT IT_DATA INTO MY_DATA.
  LINE LINE + 1.   "Excel 中行號從1開始

  CALL METHOD   OF EXCEL 'CELLS' = CELL EXPORTING #1 LINE #2 1"指定單元格,
  SET  PROPERTY OF CELL  'VALUE' = MY_DATA-MANDT.                   "寫入值

  CALL METHOD   OF EXCEL 'CELLS' = CELL EXPORTING #1 LINE #2 2"指定單元格,
  SET  PROPERTY OF CELL  'VALUE' = MY_DATA-BNAME.                   "寫入值

  CALL METHOD   OF EXCEL 'CELLS' = CELL EXPORTING #1 LINE #2 3"指定單元格,
  SET  PROPERTY OF CELL  'VALUE' = MY_DATA-ERDAT.                   "寫入值

  CALL METHOD   OF EXCEL 'CELLS' = CELL EXPORTING #1 LINE #2 4"指定單元格,
  SET  PROPERTY OF CELL  'VALUE' = MY_DATA-LTIME.                   "寫入值

ENDLOOP.

GET PROPERTY OF EXCEL    'ACTIVESHEET'         = SHEET.          "激活工做簿
GET PROPERTY OF EXCEL    'ACTIVEWORKBOOK'      = WORKBOOK.       "激活工做區

CALL METHOD  OF WORKBOOK 'SAVEAS' EXPORTING #1 = XLSNAME #2 1"將excel文件保存
CALL METHOD  OF WORKBOOK 'CLOSE'.                                "關閉工做區
CALL METHOD  OF EXCEL    'QUIT'.                                 "退出excel

*WRITE:/ XLSNAME,'DONE'.                                          "退出成功,輸出done

FREE OBJECT SHEET.                                               "釋放操做
FREE OBJECT WORKBOOK.
FREE OBJECT EXCEL.
html

其餘方法:編程

目錄函數

1. 函數: GUI_DOWNLOAD

  這是一種最基本的方法,對應 CLASS: CL_GUI_FRONTEND_SERVICES 的方法 GUI_DOWNLOAD工具

      注意FILENAME參數的擴展名應爲XLS,這樣在保存時能夠保存爲EXCEL格式。 示例以下:性能

 1 DATA:itab LIKE TABLE OF  mara WITH HEADER LINE.字體

 3DATA:BEGINOF t_fieldnames  OCCURS0,
 4 
 5        name TYPE char20,
 6 
 7      END OF t_fieldnames.
 8 
 9 START-OF-SELECTION.
10 
11   SELECT * FROM mara INTO TABLE itab UP TO 10 ROWS.
12 
13   t_fieldnames-name = '公司代碼'.
14 
15   APPEND t_fieldnames.
16 
17   t_fieldnames-name = '功能範圍'.
18 
19   APPEND t_fieldnames.
20 
21   CALL FUNCTION 'GUI_DOWNLOAD'
22     EXPORTING
23       filename   = 'C:\1234.xls'
24       filetype   = 'DAT'
25       "這裏通常用DAT,若是用ASC則1000-不會顯示爲-1000,而dat會顯示爲-1000,若是用DBF則不會有縮進,即字符前面的空格會被除去,並且字符的前導0也會輸出。
26       codepage   = '8404'
27     TABLES
28       data_tab   = itab
29       fieldnames = t_fieldnames.  ui

    這個函數雖然比較簡單,但當FILETYPE爲DAT和ASC時,生成的文件用EXCEL打開時會彈出以下的對話框:google

    緣由: 以DAT和ASC格式存的表格實際上是TXT格式,與EXCEL格式不一致,將擴展名改成TXT,會很容易看出這一點。spa

2. 函數:SAP_CONVERT_TO_XLS_FORMAT設計

   這個FM功能與GUI_DOWNLOAD相似,支持xlsx格式:

SELECT * FROM sflight INTO TABLE @DATA(gt_temp) UP TO 10 ROWS. CALL FUNCTION 'SAP_CONVERT_TO_XLS_FORMAT' EXPORTING i_filename = 'C:\SAP\QQ1.XLSX' TABLES i_tab_sap_data = gt_temp EXCEPTIONS conversion_failed = 1 OTHERS = 2. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF.

3. 函數: MS_EXCEL_OLE_STANDARD_DAT

     同時也會直接打開EXCEL文件。這個FM不單單能把數據傳到EXCEL,

    可是這個函數有一個缺點:當要把中文數據導入到EXCEL時就必有登錄中文的GUI運行程序,不然中文就會變成'#'號。

 1 DATA:BEGIN OF it_fieldnames  OCCURS 0,
 2 
 3        name TYPE char20,
 4 
 5      END OF it_fieldnames.
 6 
 7 it_fieldnames-name = 'Company Code'.
 8 
 9 APPEND it_fieldnames.
10 
11 it_fieldnames-name = 'Function Area'.
12 
13 APPEND it_fieldnames.
14 
15 it_fieldnames-name = '5'. "針對非C、N、D、T類型列的列名,函數有Bug
16 
17 APPEND it_fieldnames.
18 
19 CALL FUNCTION 'MS_EXCEL_OLE_STANDARD_DAT'
20   EXPORTING
21     file_name  = 'C:\johnson.XLSX'
22 *   CREATE_PIVOT                    = 0
23 *   DATA_SHEET_NAME                 = ' '
24 *   PIVOT_SHEET_NAME                = ' '
25 *   PASSWORD   = ' '
26 *   pASSWORD_OPTION                 = 0
27   TABLES
28 *   PIVOT_FIELD_TAB                 =
29     data_tab   = itab
30     fieldnames = it_fieldnames
31 *     EXCEPTIONS
32 *   FILE_NOT_EXIST                  = 1
33 *   FILENAME_EXPECTED               = 2
34 *   cOMMUNICATION_ERROR             = 3
35 *   oLE_OBJECT_METHOD_ERROR         = 4
36 *   OLE_OBJECT_PROPERTY_ERROR       = 5
37 *   INVALID_PIVOT_FIELDS            = 6
38 *   DOWNLOAD_PROBLEM                = 7
39 *   OTHERS     = 8

    說明:應用這個FM時要注意的問題:

  一、Fieldname數據類型會被強制轉變爲對應列的類型,若是轉換失敗則Dump

  二、若是連續兩次或兩次以上以上調用,列名會跑到數據區

    還有一個函數彷佛是它的前身,名字是 EXCEL_OLE_STANDARD_DAT ,實現方法類似。不過這個函數對某些表會報"data can't converted in unicode program" 的錯誤,因此仍是建議採用最新的函數。

4. OLE

這種方式與上面幾種比較優勢在於可以定製EXCEL格式,不過比較麻煩。

實現方法見這篇文章:http://www.cnblogs.com/hhelibeb/p/5787396.html

5. 函數: XXL_FULL_API

一樣能實現EXCEL格式,而且速度上較OLE有優點。SE38有幾個參考示例: XXLTTEST, XXLSTEST, XXLFTEST

6. ABAP2XLSX

這是一個類包,是一羣愛好者開發的一個專門用於將ABAP數據導入到EXCEL的類,包括對齊,合併,字體,着色等的設置,由於是面向對象的,相比OLE方式要簡單,編寫程序也就比較省力。

通常用於須要定製EXCEL格式的狀況。

   具體可參考此文章

7. XLSX Workbench

一種可視化表單生成工具,相比複雜的OLE,能夠用少許代碼+一些拖拽和配置來生成EXCEL報表,性能更好。按XLSX Workbench的文檔介紹,它有九大特性:

  • 無需ABAP編程技能
  • 可視化設計方式
  • 高性能
  • 支持後臺處理
  • 強大的表單格式特性支持
  • 支持公式
  • 支持圖片
  • 支持圖表
  • 支持樹

官方文檔:https://sites.google.com/site/sapxlwb/home

XLSX Workbench是我眼中的首選方案,由於它的可視化編輯工具真的很方便。經過這個工具,開發者只須要簡單地將數據放入設計好的context結構,而且在可視化工具中將context綁定到具體的單元格,就能夠生成EXCEL文件了:

DATA: l_data TYPE zcontext. CALL FUNCTION 'ZXLWB_CALLFORM' EXPORTING iv_formname = 'ZXLWBFORM' iv_context_ref = l_data EXCEPTIONS OTHERS = 2. IF sy-subrc NE 0 . MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 . ENDIF .
相關文章
相關標籤/搜索