在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 2023年的**:
關於ole,jerry知道的就這麼點了,在sap研究院裡如今我們還是會和微軟的技術打交道,比如微軟的azure.
如果jerry沒記錯的話, 微軟office從2007版本開始, 採用新的支援office open xml標準的格式來管理excel和word等檔案。jerry 2023年在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文件正文,文字的字型型別,顏色也包含在內。如下圖所示:
excel的例子我沒有動手做過,不過原理類似,大家可以用開發包s_ooxml_core裡的cl_xlsx_document來操作格式為xlsx的excel文件。
除此之外,還有乙個著名的開源專案,abap2xlsx, jerry沒有試過,感興趣的朋友可以試試。
最後,大家在se24裡使用關鍵字xslx以及se38裡搜尋_ole,
可以從搜尋列表裡選一些點進去,參考sap標準程式是如何操作excel文件的。
使用POI操作Excel
apache的jakata專案poi http poi.apache.org 用來操作excel,並能滿足大部分需要.poi下面有幾個子專案,其中hssf xssf專案 http poi.apache.org spreadsheet index.html 用來實現excel讀寫的.public st...
使用OpenRowSet操作Excel
有兩種介面可供選擇 microsoft.jet.oledb.4.0 以下簡稱 jet 引擎 和microsoft.ace.oledb.12.0 以下簡稱 ace 引擎 jet 引擎大家都很熟悉,可以訪問 office 97 2003,但不能訪問 office 2007。ace 引擎是隨 office...
使用OpenRowSet操作Excel
有兩種介面可供選擇 microsoft.jet.oledb.4.0 以下簡稱 jet 引擎 和microsoft.ace.oledb.12.0 以下簡稱 ace 引擎 jet 引擎大家都很熟悉,可以訪問 office 97 2003,但不能訪問 office 2007。ace 引擎是隨 office...