使用ABAP操作Excel的幾種方法
這篇文章本來不在我計劃之內,因為最近一個朋友微信上問到我這個問題,但我平時在SAP研究院工作中從沒遇到過需要用ABAP操作Excel的需求,因此也沒有太多技術實現細節可以分享給大家,只能泛泛寫一些。
用ABAP操作Excel這個需求算是比較常見,所以Jerry希望這篇文章能起到拋磚引玉的效果,在這個話題上有多年工作經驗的朋友們,歡迎留言,指出Jerry文章中不足或者錯誤之處。
在SAPGUI里根據關鍵字OLE搜尋,能找到通過ABAP操作Excel的一種辦法:
這段文件說的比較清楚,微軟的Word和Excel這種Office應用,提供了一種所謂automation的介面,暴露的公有類的方法和屬性可以被其他應用消費。
作為ABAP應用開發人員,我們通過呼叫OLE物件的方法CALL METHOD, GET PROPERTY,SET PROPERTY等來訪問微軟Word和Excel的automation介面,程式碼看起來像這樣:
上面這個函式RH_START_EXCEL_DATA_OLE呼叫微軟Excel的automation介面,新建一個Excel workbook,然後準備把ABAP內表裡的資料寫到Excel裡。
你也許會問,我咋知道Excel裡有哪些公有的類和方法可以被ABAP呼叫呢?
在Excel裡點選右鍵,選擇View Code:
開啟Microsoft Visual Basic Object Brower,所有可用的類和方法都列在這裡了,上面ABAP程式碼第218行呼叫的workbook的open方法在列表裡也能找到。
這個解決方案只在windows平臺有效,並且需要執行SAPGUI的Presentation Server上安裝有微軟的Excel應用。
我們採用OLE的方式操作Excel時,開啟Windows作業系統的工作管理員,會發現一個以/automation -Embedding引數啟動的Excel程式。
這裡的-Embedding引數,來自OLE的全稱:Object Linking and Embedding裡的一部分。OLE是微軟的一項非常古老的技術了。
微軟和SAP兩位大佬,Bill Gates和Hasso Plattner 1993年的照片:
關於OLE,Jerry知道的就這麼點了,在SAP研究院裡如今我們還是會和微軟的技術打交道,比如微軟的Azure.
如果Jerry沒記錯的話, 微軟Office從2007版本開始, 採用新的支援Office Open XML標準的格式來管理Excel和Word等檔案。Jerry 2014年在SAP成都研究院CRM開發團隊負責CRM Document Builder這個模組,當時編寫過使用ABAP操作Word文件的程式碼。
以Word為例,下圖是我建立了一個最簡單的Word文件,包含了一個Header區域,一個由三行彩色文字組成的段落,還有一張圖片。
我們把這個Word文件的副檔名從.docx改成.zip, 然後雙擊,就可以用解壓軟體比如winrar開啟。
於是發現這一個最簡單的按照Office Open XML協議實現的Word文件,實際上由如此多的xml和資料夾構成。
使用SAP標準的類CL_DOCX_DOCUMENT讀取Word檔案內容:
上述程式碼的簡要說明:
(1) 將word文件的二進位制內容傳入方法cl_docx_document=>load_document,得到一個文件物件引用,然後就可以藉助該物件引用呼叫各種方法了。
(2) word文件的建立者,建立時間,最後修改時間等資訊都儲存在所謂的“Core property part”內,可以通過方法lo_document->get_corepropertiespart獲得"Core property part"的引用,再使用該引用呼叫方法get_data獲得實際內容。
下圖是get_data返回的內容的一個例子,可以看出是xml格式。
(3) 現在我們準備讀取Word文件的正文了。使用方法lo_document->get_maindocumentpart得到Word文件正文,文字的字型型別,顏色也包含在內。如下圖所示:
(4) Word文件裡插入的圖片的二進位制內容當然也是可以讀取出來的。使用方法:lo_image_parts->get_part返回。
Excel的例子我沒有動手做過,不過原理類似,大家可以用開發包S_OOXML_CORE裡的CL_XLSX_DOCUMENT來操作格式為xlsx的Excel文件。
除此之外,還有一個著名的開源專案, abap2xlsx, Jerry沒有試過,感興趣的朋友可以試試。
最後,大家在SE24裡使用關鍵字XSLX以及SE38裡搜尋_OLE,
可以從搜尋列表裡選一些點進去,參考SAP標準程式是如何操作Excel文件的。
希望這些內容對大家有用,感謝閱讀。
更多閱讀
- Jerry的ABAP, Java和JavaScript亂燉
- ABAP開發人員未來應該學些什麼
- Jerry 2017年的五一小長假: 8種經典排序演算法的ABAP實現
- Jerry的ABAP原創技術文章合集
- 300行ABAP程式碼實現一個最簡單的區塊鏈原型
- 使用Java+SAP雲平臺+SAP Cloud Connector呼叫ABAP On-Premise系統裡的函式
- 在SAP雲平臺的CloudFoundry環境下消費ABAP On-Premise OData服務
- ABAP vs Java, 蛙泳 vs 自由泳
- 聊聊C語言和ABAP
- 動手使用ABAP Channel開發一些小工具,提升日常工作效率
- 我用ABAP做過的那些無聊的事情
- 不喜歡SAP GUI? 那試試用Eclipse進行ABAP開發吧
- 使用Visual Studio Code編寫和啟用ABAP程式碼
- 你的ABAP程式給佛祖開過光麼? 來試試Jerry這個小技巧
- 在SAP雲平臺ABAP程式設計環境上編寫第一段ABAP程式
- SAP官方釋出的ABAP程式設計規範
- ABAP Code Inspector那些隱藏的功能,您都知道嗎?
- 還在用ABAP進行SAP產品的二次開發?來了解下這種全新的二次開發理念吧
- ABAP Netweaver體內的那些寄生式程式語言
- 從SAP社群上的一篇部落格開始,聊聊SAP產品命名背後的那份情懷
- 雲端的ABAP Restful服務開發
- 如何在SAP雲平臺ABAP程式設計環境裡把CDS view暴露成OData服務
- 使用abapGit在ABAP On-Premises系統和SAP雲平臺ABAP環境之間進行程式碼傳輸
- 30分鐘用Restful ABAP Programming模型開發一個支援增刪改查的Fiori應用
- Jerry帶您瞭解Restful ABAP Programming模型系列之二:Action和Validation的實現
- Jerry帶您瞭解Restful ABAP Programming模型系列之三: 雲端ABAP應用除錯
- SAP雲平臺上的ABAP程式設計環境裡如何消費第三方服務
- ABAP開發者上雲的時候到了 - 現在大家可以免費使用SAP雲平臺ABAP環境的試用版了
- 學而不思則罔 - SAP雲平臺ABAP程式設計環境的由來和適用場景
- SAP雲平臺裡的三叉戟應用
- 如何基於Restful ABAP Programming模型開發並部署一個支援增刪改查的Fiori應用
- SAP 2019 TechEd Key Note解讀:雲時代下SAP從業人員如何做二次開發?
- 有哪些ABAP關鍵字和語法,到了ABAP雲環境上就沒辦法用了?
- ABAP開發環境終於支援以駝峰命名法自動格式化ABAP變數名了
- 利用ABAP 740的新關鍵字REDUCE完成一個實際工作任務
- 一段讓人瑟瑟發抖的ABAP程式碼
- 昨日萬聖節ABAP怪獸級程式碼謎團,公佈答案啦
- 介紹一種在ABAP核心態進行內表高效拷貝的方法
- 使用SAP Cloud Application Programming模型開發OData的一個實際例子
- 當ABAP遇見普羅米修斯
- 使用ABAP繪製可伸縮向量圖
- ABAP開發環境語法高亮的那些事兒
- SAP錯誤訊息除錯之七種武器: 讓所有的錯誤訊息都能被定位
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2667873/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- xml操作的幾種方法XML
- 使用 JS 來動態操作 css ,你知道幾種方法?JSCSS
- 幾種集合的幾種方法
- python2.7連線操作redis的幾種方法PythonRedis
- 使用Excel呼叫ABAP系統的函式Excel函式
- @Value DI注入 的幾種使用方法
- mysql最佳化通常使用的幾種方法MySql
- Stream 的幾種中間操作
- 7種Excel表格打勾√的方法 Excel怎麼打勾?Excel
- LINUX 使用批量刪除檔案的幾種方法Linux
- (新手)使用pandas操作EXCELExcel
- 使用Java操作Excel表格JavaExcel
- 基於 ABAP Fundamental Library 應用支援的幾種 Connectivity 方式
- Laravel 表單驗證器的幾種使用方法Laravel
- Billboards 技術在Unity 中的幾種使用方法Unity
- SAP ABAP 系統進行資料庫表查詢的幾種常用方法的試讀版資料庫
- SAP ABAP Application Log 的使用方法APP
- ABAP TEST-SEAM 的使用方法
- Laravel 重定向的幾種方法Laravel
- 建樹的幾種常用方法
- MATLAB 生成exe 的幾種方法Matlab
- css居中幾種方法CSS
- Linux 檢視記憶體使用情況的幾種方法Linux記憶體
- 使用WeihanLi.Npoi操作ExcelExcel
- 在 Excel 內使用 ODBC 消費 SAP ABAP CDS viewExcelView
- Python unittest.TestLoader()類的幾種尋找testcase的方法的使用Python
- 自動求和公式excel怎麼做 excel求和的三種方法公式Excel
- iOS常見的幾種加密方法iOS加密
- js判斷物件的幾種方法JS物件
- div固定顯示的幾種方法
- JS遍歷物件的幾種方法JS物件
- Linux安裝mysql的幾種方法LinuxMySql
- 遍歷陣列的幾種方法陣列
- 陣列去重的幾種方法陣列
- 頁面跳轉的幾種方法
- iframe跨域的幾種常用方法跨域
- Python中清空list的幾種方法Python
- jQuery幾種隱藏span的方法jQuery