1.FM:GUI_DOWNLOAD
這是最基本的方法,對應 CLASS: CL_GUI_FRONTEND_SERVICES 的方法 GUI_DOWNLOAD
注意參數 FILENAME 以xls 結尾這樣在保存時可以保存為 excel.
示例如下
data:itab like table of mara WITH HEADER LINE.
DATA:BEGIN OF T_FIELDNAMES OCCURS 0,
NAME TYPE CHAR20,
END OF T_FIELDNAMES.
START-OF-SELECTION.
select * from mara into table itab up to 10 rows.
T_FIELDNAMES-NAME = '公司代碼'.
APPEND T_FIELDNAMES.
T_FIELDNAMES-NAME = '功能范圍'.
APPEND T_FIELDNAMES.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = 'C:\1234.xls'
FILETYPE = 'DAT'
"這里一般用DAT,如果用ASC則1000-不會顯示為-1000,而dat會顯示為-1000,如果用DBF則不會有縮進,即字符前面的空格會被除去,而且字符的前導0也會輸出。
CODEPAGE = '8404'
tables
data_tab = ITAB
FIELDNAMES = T_FIELDNAMES
這個函數雖然說比較簡單,但當FILETYP為DAT 和ASC時,在我的2010版EXCEL打開時會彈出如下的對話框(不知道在EXCEL 2003會不會有這樣的問題,知道的童鞋可以給個留言):
原因: 以DAT和ASC格式存的EXCEL其實是TXT格式,與EXCEL格式不一致。
2.FM:SAP_CONVERT_TO_XLS_FORMAT
這個FM功能與GUI_DOWNLOAD類似,不過與EXCEL版本有兼容性的問題,本人在自己的系統上(excel 2010)測試此FM,給出了EXCEL文件格式無效,無法打開,在EXCEL2003暫時沒試過。不過,這里還是給出示例:
CALL FUNCTION 'SAP_CONVERT_TO_XLS_FORMAT'
EXPORTING
* I_FIELD_SEPERATOR =
* I_LINE_HEADER =
I_FILENAME = p_file "文件名
* I_APPL_KEEP = ' '
TABLES
I_TAB_SAP_DATA = itab “內表
* CHANGING
* I_TAB_CONVERTED_DATA =
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2
3.FM:MS_EXCEL_OLE_STANDARD_DAT
這個FM不僅僅能把數據傳到EXCEL同時也會直接打開EXCEL文件。
但是這個函數有一個缺點:當要把中文數據導入到EXCEL時就必有登陸中文的GUI運行程序,否則中文就會變成'#'號。
DATA:BEGIN OF iT_FIELDNAMES OCCURS 0,
NAME TYPE CHAR20,
END OF iT_FIELDNAMES.
iT_FIELDNAMES-NAME = 'Company Code'.
APPEND iT_FIELDNAMES.
iT_FIELDNAMES-NAME = 'Function Area'.
APPEND iT_FIELDNAMES.
iT_FIELDNAMES-NAME = '5'. "針對非C、N、D、T類型列的列名,函數有Bug
APPEND iT_FIELDNAMES.
CALL FUNCTION 'MS_EXCEL_OLE_STANDARD_DAT'
EXPORTING
file_name = 'C:\johnson.XLSX'
* CREATE_PIVOT = 0
* DATA_SHEET_NAME = ' '
* PIVOT_SHEET_NAME = ' '
* PASSWORD = ' '
* pASSWORD_OPTION = 0
TABLES
* PIVOT_FIELD_TAB =
DATA_TAB = itab
FIELDNAMES = it_fieldnames
* EXCEPTIONS
* FILE_NOT_EXIST = 1
* FILENAME_EXPECTED = 2
* cOMMUNICATION_ERROR = 3
* oLE_OBJECT_METHOD_ERROR = 4
* OLE_OBJECT_PROPERTY_ERROR = 5
* INVALID_PIVOT_FIELDS = 6
* DOWNLOAD_PROBLEM = 7
* OTHERS = 8.
說明:應用這個FM時要注意的BUG:
1、Fieldname數據類型會被強制轉變為對應列的類型,如果轉換失敗則Dump
2、如果連續兩次或兩次以上以上調用,列名會跑到數據區
還有一個貌似是這個函數前身 EXCEL_OLE_STANDARD_DAT ,實現方法差不多,不過這個函數對某些表會報
"data can't converted in unicode program" 的錯誤,所以還是建議采用最新的函數。
4.FM: XXL_FULL_API
這個作者還沒有用過,不過有個參考示例se38:XXLTTEST
5.OLE
這種方式與上面幾種比較優點在於能夠定制EXCEL格式,不過比較麻煩。
實現方法google
6.ABAP2XLSX
這是一個類包,是一群愛好者開發的一個專門用於將ABAP數據導入到EXCEL的類,包括對齊,合並,字體,着色等的設置,因為是面向對象的,相比OLE方式要簡單,編寫程序也就比較省力。
這個方法一般用於需要定制EXCEL格式的情況下使用。