這是一篇轉載文章,本人修改了其中的幾個錯字病句
這是一種最基本的方法,對應 CLASS: CL_GUI_FRONTEND_SERVICES 的方法 GUI_DOWNLOAD
注意FILENAME參數的擴展名應為XLS,這樣在保存時可以保存為EXCEL格式。 示例如下:
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.
這個函數雖然比較簡單,但當FILETYPE為DAT和ASC時,生成的文件用EXCEL打開時會彈出如下的對話框:
原因: 以DAT和ASC格式存的表格其實是TXT格式,與EXCEL格式不一致,將擴展名改為TXT,會很容易看出這一點。
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運行程序,否則中文就會變成'#'號。
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
40 .
說明:應用這個FM時要注意的問題:
1、Fieldname數據類型會被強制轉變為對應列的類型,如果轉換失敗則Dump
2、如果連續兩次或兩次以上以上調用,列名會跑到數據區
還有一個函數似乎是它的前身,名字是 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 .