ABAP內表導出為EXCEL格式的幾種方法


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

內表數據下載到EXCEL的幾種方法

本文鏈接: https://www.cnblogs.com/hhelibeb/articles/5765451.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. 

 

 

    這個函數雖然比較簡單,但當FILETYPEDATASC時,生成的文件用EXCEL打開時會彈出如下的對話框

 



    原因: DATASC格式存的表格其實是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格式,不過比較麻煩。

實現方法見這篇文章: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 .

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM