1. 程式人生 > >ABAP內表匯出為EXCEL格式的幾種方法(轉)

ABAP內表匯出為EXCEL格式的幾種方法(轉)

目錄

正文

 這是一篇轉載文章,本人修改了其中的幾個錯字病句

內表資料下載到EXCEL的幾種方法

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. 

複製程式碼

    這個函式雖然比較簡單,但當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執行程式,否則中文就會變成'#'號。

複製程式碼

 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 40   .

複製程式碼

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

  1、Fieldname資料型別會被強制轉變為對應列的型別,如果轉換失敗則Dump

  2、如果連續兩次或兩次以上以上呼叫,列名會跑到資料區

    還有一個函式似乎是它的前身,名字是 EXCEL_OLE_STANDARD_DAT ,實現方法相似。不過這個函式對某些表會報"data can't converted in unicode program" 的錯誤,所以還是建議採用最新的函式。

回到頂部

4. OLE

這種方式與上面幾種比較優點在於能夠定製EXCEL格式,不過比較麻煩。

回到頂部

5. 函式: XXL_FULL_API

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

回到頂部

6. ABAP2XLSX

這是一個類包,是一群愛好者開發的一個專門用於將ABAP資料匯入到EXCEL的類,包括對齊,合併,字型,著色等的設定,因為是面向物件的,相比OLE方式要簡單,編寫程式也就比較省力。

一般用於需要定製EXCEL格式的情況。

   具體可參考此文章

回到頂部

7. XLSX Workbench

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

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

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 .