2021.02.07 【ABAP隨筆】-Excel高效輸出工具-xlsx workbench


一 介紹說明

        前段時間做財務報表項目,由於用戶集團下面公司眾多,每個月看財務管控的報表需要看幾十張客制化的報表,而且是在一個excel文件中,相當於一個公司一個sheet頁,而且excel的樣式需要根據客戶的需求進行不同的定制。之前用戶在一家公司下使用excel導出是采用SMW0模板+OLE輸出到excel單元格的方式,下載一張財務報表需要幾分鍾,現在需要擴展到全集團,下載幾十家公司的財務報表速度就及其的慢了,所以看到網上有XLSX Workbench開源項目,所以就自己研究了一下安利給了客戶,結果就是導出幾十家公司的客制報表數據僅需要十幾秒

 

XLSX Workbench是一種高效Excel輸出的工具,用於在SAP環境中設計基於Excel的表單。由於采用了完全可視化的形式來開發表格(像SMARTFORMS進行開發),因此它非常易於學習和使用。XLSX Workbench的可視化方法使您即使沒有ABAP技能也可以開發打印表格。
XLSX Workbench是功能強大且非常靈活的工具,適用於具有圖片,圖表,層次結構和其他格式設置功能的簡單表單和復雜動態表單的開發。而且XLSX Workbench提供了高性能的生成打印表格結果文件的功能。

二 XLSX Workbench 安裝

安裝方式有2種,一種是通過SAPLink安裝,另一種就是自己手動去創建,個人還是推薦使用SAPLink去安裝的,這樣避免一些不必要的錯誤的產生。

image.png

如果通過人工手工創建程序則需要:

(1)通過se38創建程序:ZXLWB

image.png

(2)創建事務代碼:ZXLWB_WORKBENCH

image.png

(3)創建包含程序:ZXLWB_INCLUDE

image.png

(4)創建函數組:ZXLWB

image.png

同時創建

Function:ZXLWB_CALLFORM 和 ZXLWB_WORKBENCH

LZXLWBF01 LZXLWBTOP ZXLWB_INCLUDE

代碼詳情 請自行下載文件(下載鏈接關注文章末尾)

(5)GUI狀態為如下圖:其他地方為空白

image.png

(6)GUI 標題

image.png

(7)屏幕0100

image.png

image.png

(8)Function ZXLWB_CALLFORM參數:

image.png

image.png

image.png

(9)Function ZXLWB_WORKBENCH參數:

image.pngimage.png

(10)安裝時可能會出現的問題

10.1 如果CL_HRPAYNA_GUI_ALV_TREE 這個類不在你的系統中,請自行創建一個類來代替SE24創建自定義類

image.png

image.png

繼承超類CL_GUI_ALV_TREE

image.png

創建一個Method :GET_OUTTAB

image.png

參數如下:

image.png

image.png

 

10.2 如果系統中不存在CKF_FIELD_VALUE_TABLE 結構,請自行創建結構代替

image.png

image.png

image.png

三 Demo客制化模板制作

3.1 我們使用系統自帶的SFLIGHT表來構建下航班信息輸出報表

首先我們創建需要用到的內表結構

表頭數據

image.png

內表數據

image.png

image.png

3.2 使用事務碼ZXLWB_WORKBENCH來創建輸出模板

(1)輸入名稱並點擊create

image.png

如下圖,你可以看到編輯excel模板的界面,操作方發類似於smartforms的操作

image.png雙擊模板名稱,在Name of context 欄位點擊image.png,將創建好的結構分配給模板

image.png

image.png

如果需要自動根據結構創建模板結構,可以點擊Auto

image.png

如下圖自動創建了form的結構,status 為紅色的表示仍需要操作

image.png

如下可以設置當前綁定的是excel界面中的哪個sheet

在sheet name at runtime 中可以設置輸出sheet頁名稱為自動的sheet1,sheet2...

也可以點擊

如下可以設置當前綁定的是excel界面中的哪個sheet

在sheet name at runtime 中可以設置輸出sheet頁名稱為自動的sheet1,sheet2...

也可以點擊image.png設置sheet name 關聯ZXWLB_S_001_HEADER中的字段來賦值字段

設置sheet name 關聯ZXWLB_S_001_HEADER中的字段來賦值字段

image.png

(2)在EXCEL的區域設置好Excel模板,如下圖,模板上Excel單元格格式和輸出時Excel保持一致

image.png

(3)將FORM Structure 和 Excel模板區塊對應綁定上:

選中如下圖1中的excel區域,雙擊ZXWLB_S_001_HEADER, 然后點擊image.png綁定excel區域和ZXWLB_S_001_HEADER

image.png

綁定之后,ZXWLB_S_001_HEADER 的Status變成綠色,下方顯示綁定區域位置

image.png

對於ZXWLB_S_001_HEADER下層字段綁定只能在ZXWLB_S_001_HEADER與Excel模板綁定的區域中進行綁定字段

image.png

image.png

Convert value to ext.format 打勾相當於 = ALPHA

image.png

其他2個抬頭字段如上操作

image.png

下圖為綁定了內表-ITEM,該image.png標識表示每一次循環完畢之后向下增加條目

image.png

綁定關系如下圖:

image.png

同時刪除不需要的字段

image.png

保存和激活設計的模板

image.png

四 調用設計好的模板

部分調用代碼如下:

FORM frm_down_excel USING uv_filename TYPE string .
  DATA ls_header TYPE zxwlb_s_001_header.
  DATA ls_item TYPE zxwlb_s_001_item.
  DATA lt_item TYPE zxwlb_t_001_item.
  "賦值
  ls_header-flight_info = 'Tab Flight'.
  ls_header-currency = 'CNY'.
  LOOP AT sflight INTO DATA(ls_sflight).
    MOVE-CORRESPONDING ls_sflight TO ls_item.
    ls_header-total_price = ls_header-total_price + ls_item-price.
    APPEND ls_item TO lt_item.
    CLEAR ls_item.
  ENDLOOP.
  APPEND LINES OF lt_item TO ls_header-item.
  "調用function
  CALL FUNCTION 'ZXLWB_CALLFORM'
    EXPORTING
      iv_formname        = 'ZXLSX_WORKBENCH_001'" xlsx workbench form 模板名稱
      iv_context_ref     = ls_header "數據
*     IV_VIEWER_TITLE    = SY-TITLE
*     IV_VIEWER_INPLACE  = 'X'
*     IV_VIEWER_CALLBACK_PROG       = SY-CPROG
*     IV_VIEWER_CALLBACK_FORM       =
      iv_viewer_suppress = 'X' " 為空的,則調用內嵌EXCEL 顯示數據
*     IV_PROTECT         =
      iv_save_as         = uv_filename  "C:\Users\*****\Desktop\EXPORT.xlsx  保存在PC目錄
*     IV_SAVE_AS_APPSERVER          =
*     IV_STARTUP_MACRO   =
*     IT_DOCPROPERTIES   =
* IMPORTING
*     EV_DOCUMENT_RAWDATA           =
*     EV_DOCUMENT_EXTENSION         =
    EXCEPTIONS
      process_terminated = 1
      OTHERS             = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1
    sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.

當我們運行程序后,點擊Down Excel可以直接下載Excel

image.png

下載出來的excel如下圖所示

image.png

這樣一個簡單的demo就制作完畢,總體來說下載速度是杠杠的,然后代碼僅僅寫了調用和賦值兩塊內容,Excel中的格式可以按照需求修改+綁定數據結構,就可以實現客戶化的excel輸出了。

 最后附上saplink nugg文檔和XLSX Workbench鏈接

鏈接:https://pan.baidu.com/s/1GZaEv8c2BjtWNHBb_ymGBQ 

提取碼:whgk 

 


免責聲明!

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



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