使用ABAP操作Excel的几种方法
這篇文章本來不在我計劃之內(nèi),因為最近一個朋友微信上問到我這個問題,但我平時在SAP研究院工作中從沒遇到過需要用ABAP操作Excel的需求,因此也沒有太多技術(shù)實現(xiàn)細節(jié)可以分享給大家,只能泛泛寫一些。
用ABAP操作Excel這個需求算是比較常見,所以Jerry希望這篇文章能起到拋磚引玉的效果,在這個話題上有多年工作經(jīng)驗的朋友們,歡迎留言,指出Jerry文章中不足或者錯誤之處。
在SAPGUI里根據(jù)關(guān)鍵字OLE搜索,能找到通過ABAP操作Excel的一種辦法:
這段文檔說的比較清楚,微軟的Word和Excel這種Office應用,提供了一種所謂automation的接口,暴露的公有類的方法和屬性可以被其他應用消費。
作為ABAP應用開發(fā)人員,我們通過調(diào)用OLE對象的方法CALL METHOD, GET PROPERTY,SET PROPERTY等來訪問微軟Word和Excel的automation接口,代碼看起來像這樣:
上面這個函數(shù)RH_START_EXCEL_DATA_OLE調(diào)用微軟Excel的automation接口,新建一個Excel workbook,然后準備把ABAP內(nèi)表里的數(shù)據(jù)寫到Excel里。
你也許會問,我咋知道Excel里有哪些公有的類和方法可以被ABAP調(diào)用呢?
在Excel里點擊右鍵,選擇View Code:
打開Microsoft Visual Basic Object Brower,所有可用的類和方法都列在這里了,上面ABAP代碼第218行調(diào)用的workbook的open方法在列表里也能找到。
這個解決方案只在windows平臺有效,并且需要運行SAPGUI的Presentation Server上安裝有微軟的Excel應用。
我們采用OLE的方式操作Excel時,打開Windows操作系統(tǒng)的任務管理器,會發(fā)現(xiàn)一個以/automation -Embedding參數(shù)啟動的Excel進程。
這里的-Embedding參數(shù),來自OLE的全稱:Object Linking and Embedding里的一部分。OLE是微軟的一項非常古老的技術(shù)了。
微軟和SAP兩位大佬,Bill Gates和Hasso Plattner 1993年的照片:
關(guān)于OLE,Jerry知道的就這么點了,在SAP研究院里如今我們還是會和微軟的技術(shù)打交道,比如微軟的Azure.
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-IzZC3bhH-1575963016967)(https://user-images.githubusercontent.com/5669954/70382678-9abda800-199a-11ea-964b-b9c9a3736acd.png)]
如果Jerry沒記錯的話, 微軟Office從2007版本開始, 采用新的支持Office Open XML標準的格式來管理Excel和Word等文件。Jerry 2014年在SAP成都研究院CRM開發(fā)團隊負責CRM Document Builder這個模塊,當時編寫過使用ABAP操作Word文檔的代碼。
以Word為例,下圖是我創(chuàng)建了一個最簡單的Word文檔,包含了一個Header區(qū)域,一個由三行彩色文字組成的段落,還有一張圖片。
我們把這個Word文檔的擴展名從.docx改成.zip, 然后雙擊,就可以用解壓軟件比如winrar打開。
于是發(fā)現(xiàn)這一個最簡單的按照Office Open XML協(xié)議實現(xiàn)的Word文檔,實際上由如此多的xml和文件夾構(gòu)成。
使用SAP標準的類CL_DOCX_DOCUMENT讀取Word文件內(nèi)容:
上述代碼的簡要說明:
(1) 將word文檔的二進制內(nèi)容傳入方法cl_docx_document=>load_document,得到一個文檔對象引用,然后就可以借助該對象引用調(diào)用各種方法了。
(2) word文檔的創(chuàng)建者,創(chuàng)建時間,最后修改時間等信息都存儲在所謂的“Core property part”內(nèi),可以通過方法lo_document->get_corepropertiespart獲得"Core property part"的引用,再使用該引用調(diào)用方法get_data獲得實際內(nèi)容。
下圖是get_data返回的內(nèi)容的一個例子,可以看出是xml格式。
(3) 現(xiàn)在我們準備讀取Word文檔的正文了。使用方法lo_document->get_maindocumentpart得到Word文檔正文,文字的字體類型,顏色也包含在內(nèi)。如下圖所示:
(4) Word文檔里插入的圖片的二進制內(nèi)容當然也是可以讀取出來的。使用方法:lo_image_parts->get_part返回。
Excel的例子我沒有動手做過,不過原理類似,大家可以用開發(fā)包S_OOXML_CORE里的CL_XLSX_DOCUMENT來操作格式為xlsx的Excel文檔。
除此之外,還有一個著名的開源項目,abap2xlsx, Jerry沒有試過,感興趣的朋友可以試試。
最后,大家在SE24里使用關(guān)鍵字XSLX以及SE38里搜索_OLE,
可以從搜索列表里選一些點進去,參考SAP標準程序是如何操作Excel文檔的。
希望這些內(nèi)容對大家有用,感謝閱讀。
更多閱讀
-
Jerry的ABAP, Java和JavaScript亂燉
-
ABAP開發(fā)人員未來應該學些什么
-
Jerry 2017年的五一小長假:8種經(jīng)典排序算法的ABAP實現(xiàn)
-
Jerry的ABAP原創(chuàng)技術(shù)文章合集
-
300行ABAP代碼實現(xiàn)一個最簡單的區(qū)塊鏈原型
-
使用Java+SAP云平臺+SAP Cloud Connector調(diào)用ABAP On-Premise系統(tǒng)里的函數(shù)
-
在SAP云平臺的CloudFoundry環(huán)境下消費ABAP On-Premise OData服務
-
ABAP vs Java, 蛙泳 vs 自由泳
-
聊聊C語言和ABAP
-
動手使用ABAP Channel開發(fā)一些小工具,提升日常工作效率
-
我用ABAP做過的那些無聊的事情
-
不喜歡SAP GUI?那試試用Eclipse進行ABAP開發(fā)吧
-
使用Visual Studio Code編寫和激活ABAP代碼
-
你的ABAP程序給佛祖開過光么?來試試Jerry這個小技巧
-
在SAP云平臺ABAP編程環(huán)境上編寫第一段ABAP程序
-
SAP官方發(fā)布的ABAP編程規(guī)范
-
ABAP Code Inspector那些隱藏的功能,您都知道嗎?
-
還在用ABAP進行SAP產(chǎn)品的二次開發(fā)?來了解下這種全新的二次開發(fā)理念吧
-
ABAP Netweaver體內(nèi)的那些寄生式編程語言
-
從SAP社區(qū)上的一篇博客開始,聊聊SAP產(chǎn)品命名背后的那份情懷
-
云端的ABAP Restful服務開發(fā)
-
如何在SAP云平臺ABAP編程環(huán)境里把CDS view暴露成OData服務
-
使用abapGit在ABAP On-Premises系統(tǒng)和SAP云平臺ABAP環(huán)境之間進行代碼傳輸
-
30分鐘用Restful ABAP Programming模型開發(fā)一個支持增刪改查的Fiori應用
-
Jerry帶您了解Restful ABAP Programming模型系列之二:Action和Validation的實現(xiàn)
-
Jerry帶您了解Restful ABAP Programming模型系列之三:云端ABAP應用調(diào)試
-
SAP云平臺上的ABAP編程環(huán)境里如何消費第三方服務
-
ABAP開發(fā)者上云的時候到了 - 現(xiàn)在大家可以免費使用SAP云平臺ABAP環(huán)境的試用版了
-
學而不思則罔 - SAP云平臺ABAP編程環(huán)境的由來和適用場景
-
SAP云平臺里的三叉戟應用
-
如何基于Restful ABAP Programming模型開發(fā)并部署一個支持增刪改查的Fiori應用
-
SAP 2019 TechEd Key Note解讀:云時代下SAP從業(yè)人員如何做二次開發(fā)?
-
有哪些ABAP關(guān)鍵字和語法,到了ABAP云環(huán)境上就沒辦法用了?
-
ABAP開發(fā)環(huán)境終于支持以駝峰命名法自動格式化ABAP變量名了
-
利用ABAP 740的新關(guān)鍵字REDUCE完成一個實際工作任務
-
一段讓人瑟瑟發(fā)抖的ABAP代碼
-
昨日萬圣節(jié)ABAP怪獸級代碼謎團,公布答案啦
-
介紹一種在ABAP內(nèi)核態(tài)進行內(nèi)表高效拷貝的方法
-
使用SAP Cloud Application Programming模型開發(fā)OData的一個實際例子
-
當ABAP遇見普羅米修斯
-
使用ABAP繪制可伸縮矢量圖
-
ABAP開發(fā)環(huán)境語法高亮的那些事兒
-
SAP錯誤消息調(diào)試之七種武器:讓所有的錯誤消息都能被定位
要獲取更多Jerry的原創(chuàng)文章,請關(guān)注公眾號"汪子熙":
總結(jié)
以上是生活随笔為你收集整理的使用ABAP操作Excel的几种方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 表结法和账结法_我国采用表结法还是账结法
- 下一篇: 在flash中怎么做好看鼠标跟踪