使用ABAP操做Excel的幾種方法

這篇文章原本不在我計劃以內,由於最近一個朋友微信上問到我這個問題,但我平時在SAP研究院工做中從沒遇到過須要用ABAP操做Excel的需求,所以也沒有太多技術實現細節能夠分享給你們,只能泛泛寫一些。git

用ABAP操做Excel這個需求算是比較常見,因此Jerry但願這篇文章能起到拋磚引玉的效果,在這個話題上有多年工做經驗的朋友們,歡迎留言,指出Jerry文章中不足或者錯誤之處。github

在SAPGUI里根據關鍵字OLE搜索,能找到經過ABAP操做Excel的一種辦法:算法

clipboard1,1

這段文檔說的比較清楚,微軟的Word和Excel這種Office應用,提供了一種所謂automation的接口,暴露的公有類的方法和屬性能夠被其餘應用消費。編程

做爲ABAP應用開發人員,咱們經過調用OLE對象的方法CALL METHOD, GET PROPERTY,SET PROPERTY等來訪問微軟Word和Excel的automation接口,代碼看起來像這樣:windows

clipboard2,2

上面這個函數RH_START_EXCEL_DATA_OLE調用微軟Excel的automation接口,新建一個Excel workbook,而後準備把ABAP內表裏的數據寫到Excel裏。微信

你也許會問,我咋知道Excel裏有哪些公有的類和方法能夠被ABAP調用呢?編程語言

在Excel裏點擊右鍵,選擇View Code:函數

clipboard3,3

打開Microsoft Visual Basic Object Brower,全部可用的類和方法都列在這裏了,上面ABAP代碼第218行調用的workbook的open方法在列表裏也能找到。工具

clipboard4,4

這個解決方案只在windows平臺有效,而且須要運行SAPGUI的Presentation Server上安裝有微軟的Excel應用。區塊鏈

咱們採用OLE的方式操做Excel時,打開Windows操做系統的任務管理器,會發現一個以/automation -Embedding參數啓動的Excel進程。

clipboard5,5

這裏的-Embedding參數,來自OLE的全稱:Object Linking and Embedding裏的一部分。OLE是微軟的一項很是古老的技術了。

clipboard6,6

微軟和SAP兩位大佬,Bill Gates和Hasso Plattner 1993年的照片:

clipboard7

關於OLE,Jerry知道的就這麼點了,在SAP研究院裏現在咱們仍是會和微軟的技術打交道,好比微軟的Azure.

clipboard8,8

若是Jerry沒記錯的話, 微軟Office從2007版本開始, 採用新的支持Office Open XML標準的格式來管理Excel和Word等文件。Jerry 2014年在SAP成都研究院CRM開發團隊負責CRM Document Builder這個模塊,當時編寫過使用ABAP操做Word文檔的代碼。

以Word爲例,下圖是我建立了一個最簡單的Word文檔,包含了一個Header區域,一個由三行彩色文字組成的段落,還有一張圖片。

clipboard9,9

咱們把這個Word文檔的擴展名從.docx改爲.zip, 而後雙擊,就能夠用解壓軟件好比winrar打開。

因而發現這一個最簡單的按照Office Open XML協議實現的Word文檔,實際上由如此多的xml和文件夾構成。

clipboard10,10

使用SAP標準的類CL_DOCX_DOCUMENT讀取Word文件內容:

clipboard11,11

上述代碼的簡要說明:

(1) 將word文檔的二進制內容傳入方法cl_docx_document=>load_document,獲得一個文檔對象引用,而後就能夠藉助該對象引用調用各類方法了。

(2) word文檔的建立者,建立時間,最後修改時間等信息都存儲在所謂的「Core property part」內,能夠經過方法lo_document->get_corepropertiespart得到"Core property part"的引用,再使用該引用調用方法get_data得到實際內容。

下圖是get_data返回的內容的一個例子,能夠看出是xml格式。

clipboard12,12

(3) 如今咱們準備讀取Word文檔的正文了。使用方法lo_document->get_maindocumentpart獲得Word文檔正文,文字的字體類型,顏色也包含在內。以下圖所示:

clipboard13,13
clipboard14,14

(4) Word文檔裏插入的圖片的二進制內容固然也是能夠讀取出來的。使用方法:lo_image_parts->get_part返回。

Excel的例子我沒有動手作過,不過原理相似,你們能夠用開發包S_OOXML_CORE裏的CL_XLSX_DOCUMENT來操做格式爲xlsx的Excel文檔。

clipboard15,15

除此以外,還有一個著名的開源項目,abap2xlsx, Jerry沒有試過,感興趣的朋友能夠試試。

clipboard16,16

最後,你們在SE24裏使用關鍵字XSLX以及SE38裏搜索_OLE,

clipboard17,17

能夠從搜索列表裏選一些點進去,參考SAP標準程序是如何操做Excel文檔的。

clipboard18,18

但願這些內容對你們有用,感謝閱讀。

更多閱讀

要獲取更多Jerry的原創文章,請關注公衆號"汪子熙":
公衆號截圖

相關文章
相關標籤/搜索