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


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會不會有這樣的問題,知道的童鞋可以給個留言):

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

原因: 以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格式的情況下使用。


免責聲明!

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



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