一 介紹說明
前段時間做財務報表項目,由於用戶集團下面公司眾多,每個月看財務管控的報表需要看幾十張客制化的報表,而且是在一個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去安裝的,這樣避免一些不必要的錯誤的產生。
如果通過人工手工創建程序則需要:
(1)通過se38創建程序:ZXLWB
(2)創建事務代碼:ZXLWB_WORKBENCH
(3)創建包含程序:ZXLWB_INCLUDE
(4)創建函數組:ZXLWB
同時創建
Function:ZXLWB_CALLFORM 和 ZXLWB_WORKBENCH
LZXLWBF01 LZXLWBTOP ZXLWB_INCLUDE
代碼詳情 請自行下載文件(下載鏈接關注文章末尾)
(5)GUI狀態為如下圖:其他地方為空白
(6)GUI 標題
(7)屏幕0100
(8)Function ZXLWB_CALLFORM參數:
(9)Function ZXLWB_WORKBENCH參數:
(10)安裝時可能會出現的問題
10.1 如果CL_HRPAYNA_GUI_ALV_TREE 這個類不在你的系統中,請自行創建一個類來代替SE24創建自定義類
繼承超類CL_GUI_ALV_TREE
創建一個Method :GET_OUTTAB
參數如下:
10.2 如果系統中不存在CKF_FIELD_VALUE_TABLE 結構,請自行創建結構代替
三 Demo客制化模板制作
3.1 我們使用系統自帶的SFLIGHT表來構建下航班信息輸出報表
首先我們創建需要用到的內表結構
表頭數據
內表數據
3.2 使用事務碼ZXLWB_WORKBENCH來創建輸出模板
(1)輸入名稱並點擊create
如下圖,你可以看到編輯excel模板的界面,操作方發類似於smartforms的操作
雙擊模板名稱,在Name of context 欄位點擊
,將創建好的結構分配給模板
如果需要自動根據結構創建模板結構,可以點擊Auto
如下圖自動創建了form的結構,status 為紅色的表示仍需要操作
如下可以設置當前綁定的是excel界面中的哪個sheet
在sheet name at runtime 中可以設置輸出sheet頁名稱為自動的sheet1,sheet2...
也可以點擊
如下可以設置當前綁定的是excel界面中的哪個sheet
在sheet name at runtime 中可以設置輸出sheet頁名稱為自動的sheet1,sheet2...
也可以點擊設置sheet name 關聯ZXWLB_S_001_HEADER中的字段來賦值字段
設置sheet name 關聯ZXWLB_S_001_HEADER中的字段來賦值字段
(2)在EXCEL的區域設置好Excel模板,如下圖,模板上Excel單元格格式和輸出時Excel保持一致
(3)將FORM Structure 和 Excel模板區塊對應綁定上:
選中如下圖1中的excel區域,雙擊ZXWLB_S_001_HEADER, 然后點擊綁定excel區域和ZXWLB_S_001_HEADER
綁定之后,ZXWLB_S_001_HEADER 的Status變成綠色,下方顯示綁定區域位置
對於ZXWLB_S_001_HEADER下層字段綁定只能在ZXWLB_S_001_HEADER與Excel模板綁定的區域中進行綁定字段
Convert value to ext.format 打勾相當於 = ALPHA
其他2個抬頭字段如上操作
下圖為綁定了內表-ITEM,該標識表示每一次循環完畢之后向下增加條目
綁定關系如下圖:
同時刪除不需要的字段
保存和激活設計的模板
四 調用設計好的模板
部分調用代碼如下:
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
下載出來的excel如下圖所示
這樣一個簡單的demo就制作完畢,總體來說下載速度是杠杠的,然后代碼僅僅寫了調用和賦值兩塊內容,Excel中的格式可以按照需求修改+綁定數據結構,就可以實現客戶化的excel輸出了。
最后附上saplink nugg文檔和XLSX Workbench鏈接
鏈接:https://pan.baidu.com/s/1GZaEv8c2BjtWNHBb_ymGBQ
提取碼:whgk