使用ABAP操作Excel的幾種方法

2021-02-13 汪子熙
這篇文章本來不在我計劃之內,因為最近一個朋友微信上問到我這個問題,但我平時在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調用呢?

打開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沒有試過,感興趣的朋友可以試試。https://github.com/sapmentors/abap2xlsx

最後,大家在SE24裡使用關鍵字XSLX以及SE38裡搜索_OLE,

可以從搜索列表裡選一些點進去,參考SAP標準程序是如何操作Excel文檔的。

更多閱讀

佛系更文,多少隨意,謝謝。

相關焦點

  • 使用abapGit在ABAP On-Premises系統和SAP雲平臺ABAP環境之間進行代碼傳輸
    SAP ABAP顧問朋友們,應該都使用過SAPLink這個工具。
  • ABAP中讀取EXCEL中不同的SHEET數據
    ALSMEX_TABLINE*"  EXCEPTIONS*"      INCONSISTENT_PARAMETERS*"      UPLOAD_OLE*"  DATA: excel_tab* Get TAB-sign for separation of fields  CLASS cl_abap_char_utilities DEFINITION LOAD.  ld_separator = cl_abap_char_utilities=>horizontal_tab.
  • Jerry的ABAP原創技術文章合集
    文章裡介紹了6種不同的辦法。我個人認為靈活掌握了這些方法,不僅僅對於在SAPGUI環境的排錯,還是對於在Web環境,比如Fiori或者WebClient UI, 都是很有用的。往往有的朋友反映CRM中間件裡報得很多錯誤信息都不是特別有用,看了之後仍然不知道從哪裡入手來避免。
  • SAP ABAP守護進程(ABAP Daemon)的實現方式
    另一種思路就是在事務碼SICF裡創建一個新的節點並在其handler class裡書寫處理邏輯,這樣消費者可以發送HTTP請求到該ICF節點負責的url,並接收處理結果。客戶端來操作該broker:http://www.hivemq.com/demos/websocket-client/這個broker專門用於測試用途,收到MQTT消息後,會原封不動地將其回復給發送方。
  • C# 導出 Excel 的 6 種簡單方法!你會幾種?
    【CSDN 編者按】C# 導出 Excel 的6種簡單方法:數據表導出到 Excel,對象集合導出到 Excel,資料庫導出到 Excel
  • 批量處理-Excel導入模板1.1-支持多Sheet頁
    富強 民主 文明 和諧 自由 平等 公正 法制愛國 敬業 誠信 友善之前的excel模板使用了很久,但是最近老是遇到多個
  • WebDynpro中實現Excel模板下載功能
    * 取得excel模板的URL  CALL METHOD cl_wd_utilities=>construct_wd_url(    EXPORTING      application_name = lv_wd_name    IMPORTING      out_local_url    = lv_url
  • 使用Java進行excel操作的幾種方法 (下)
    easyexcel是阿里巴巴開源的一款excel解析工具,底層邏輯也是基於apache poi進行二次開發的。不同的是,再讀寫數據的時候,採用sax模式一行一行解析,在並發量很大的情況下,依然能穩定運行!下面就一起來了解一下這款新起之秀!3.1 添加依賴包<!
  • pandas操作excel全總結
    pandas是基於Numpy創建的Python包,內置了大量標準函數,能夠高效地解決數據分析數據處理和分析任務,pandas支持多種文件的操作,比如Excel,csv,json,txt 文件等,讀取文件之後,就可以對數據進行各種清洗、分析操作了。
  • 兩個excel表格核對的6種方法
    Excel表格之間的核對,是每個excel用戶都要面對的工作難題,今天帶大家一起盤點一下表格核對的方法,一共6種,以後再也不用加班勾數據了
  • excel輸入技巧:5種日期輸入方法,你能對應使用麼?
    我們在日常工作中避免不了要在excel裡輸入各種日期,下面和大家一起分享近期梳理出來的日期輸入方法大匯總,看看是否存在一種更適合你需要的方法。
  • C# 使用NPOI操作Excel文件
    feature is used to create search engines).c. extract images from Office documentsd. generate Excel sheets that contains formulas在沒有安裝Microsoft Office Excel的機子上也可以對Excel進行操作
  • 使用Java進行excel操作的幾種方法(上)
    很久以前,微軟的電子表格軟體Excel操作簡單、存儲數據直觀方便,還支持列印報表,極大的提升了工作的效率,深得白領青睞,不久之後,便成了辦公室裡的必備工具。隨著更多的新語言的崛起,例如我們所熟悉的Java,後來便有一些團隊開始開發一套能與Excel軟體無縫切換的操作工具!
  • python中使用xlrd、xlwt操作excel表格詳解
    這篇文章主要介紹了python中使用xlrd、xlwt操作excel表格詳解,python操作excel主要用到xlrd和xlwt
  • EXCEL快速選擇大片數據的幾種方法
    且慢,整列選擇其實是EXCEL十大「惡習」之一,大量空單元格被選入數據區域很容易在後續操作中遇到問題。只選擇數據區域,不多選也不少選才是正確的操作方式。那麼怎樣才能快速簡便地選中大片數據呢?以下就是幾種好多人熟悉或不熟悉的選擇方法。
  • 十分鐘上手 xlsx,4 種方法實現 Excel 導入導出
    ', upload.single('excel'), (req, res) => {  const data = importExcelFromBuffer(req.file.buffer);  res.json({ data })});最後前端使用 Ant Design 的
  • 【Python基礎】python使用openpyxl操作excel
    4)獲取表格的尺寸大小這裡所說的尺寸大小,指的是excel表格中的數據有幾行幾列,針對的是不同的sheet而言。結果如下:② .append():向表格中插入行數據.append()方式:會在表格已有的數據後面,增添這些數(按行插入);這個操作很有用,爬蟲得到的數據,可以使用該方式保存成Excel文件;
  • SAP SAPLINK安裝ABAP2XLSX
    使用SAPLINK導入開源項目ABAPXLSX第一步:安裝SAPLINK第二步:SE38運行ZSAPLINK程序第三步:選擇導入Pakeage Name,並建議勾選Overwrite Originals;然後點擊按鈕打開Nugg文件第四步:選擇abap2xlsx-7.1.0\build\ABAP2XLSX_V_7_0_6 - 2016-
  • Excel教程 | 看似不起眼的小技巧,卻能讓半小時的工作在幾秒鐘就做完!
    我們可以方便的從多種數據源導入數據,使用Dax創建計算欄位,創建多種樣式的交互式圖表,並發布共享。今天的excel技巧,是一些實戰操作。毫不誇張的說,你用半小時或更多時間完成的工作,學會以下技巧,只需要幾秒種即可完成。
  • ABAP-MYMARK-雲代碼庫
    面對程序在不同的系統之間的遷移,你是否也有這樣那樣的煩惱,saplink不能找到程序的關聯gitabap不夠靈活啦啦啦,代碼一鍵到雲,支持雲安裝,雲部署.等等個人付費伺服器級(非雲空間,雲IDE等)附上使用指南