乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      使用ABAP操作Excel的幾種方法

       汪子熙 2019-12-08
      用ABAP操作Excel這個需求算是比較常見,所以Jerry希望這篇文章能起到拋磚引玉的效果。在這個話題上有多年工作經(jīng)驗的朋友們,歡迎留言,指出Jerry文章中不足或者錯誤之處。

      在SAPGUI里根據(jù)關(guān)鍵字OLE搜索,能找到通過ABAP操作Excel的一種辦法:

      這段文檔說的比較清楚,微軟的Word和Excel等Office應(yīng)用,提供了一種所謂automation的接口,暴露的公有類的方法和屬性可以被其他應(yīng)用消費。

      作為ABAP應(yīng)用開發(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,然后準(zhǔn)備把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應(yīng)用。

      我們采用OLE的方式操作Excel時,打開Windows操作系統(tǒng)的任務(wù)管理器,會發(fā)現(xiàn)一個以/automation -Embedding參數(shù)啟動的Excel進(jìn)程。


      這里的-Embedding參數(shù),來自O(shè)LE的全稱:Object Linking and Embedding里的一部分,OLE是微軟的一項非常古老的技術(shù)了。


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

      關(guān)于OLE,Jerry知道的就只有這么一點了,在SAP研究院里如今我們還是會和微軟的技術(shù)打交道,比如微軟的Azure.


      如果Jerry沒記錯的話, 微軟Office從2007版本開始, 采用新的支持Office Open XML標(biāo)準(zhǔn)的格式來管理Excel和Word等文件。

      Jerry 2014年在SAP成都研究院CRM開發(fā)團(tuán)隊負(fù)責(zé)CRM Document Builder這個模塊,當(dāng)時編寫過使用ABAP操作Word文檔的代碼。

      以Word為例,下圖是我創(chuàng)建了一個最簡單的Word文檔,包含了一個Header區(qū)域,一個由三行彩色文字組成的段落,還有一張圖片。


      我們把這個Word文檔的擴(kuò)展名從.docx改成.zip, 然后雙擊,就可以用解壓軟件比如winrar打開。

      于是發(fā)現(xiàn)這一個最簡單的按照Office Open XML協(xié)議實現(xiàn)的Word文檔,實際上由如此多的xml和文件夾構(gòu)成。


      使用SAP標(biāo)準(zhǔn)的類CL_DOCX_DOCUMENT讀取Word文件內(nèi)容:


      上述代碼的簡要說明:

      (1) 將word文檔的二進(jìn)制內(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)在我們準(zhǔn)備讀取Word文檔的正文了。使用方法lo_document->get_maindocumentpart得到Word文檔正文,文字的字體類型,顏色也包含在內(nèi)。如下圖所示:


      (4) Word文檔里插入的圖片的二進(jìn)制內(nèi)容當(dāng)然也是可以讀取出來的。使用方法:lo_image_parts->get_part返回。

      Excel的例子我沒有動手做過,不過原理類似,大家可以用開發(fā)包S_OOXML_CORE里的CL_XLSX_DOCUMENT來操作格式為xlsx的Excel文檔。


      除此之外,還有一個著名的開源項目,abap2xlsx, Jerry沒有試過,感興趣的朋友可以試試。
      https://github.com/sapmentors/abap2xlsx


      最后,大家在SE24里使用關(guān)鍵字XSLX以及SE38里搜索_OLE,


      可以從搜索列表里選一些點進(jìn)去,參考SAP標(biāo)準(zhǔn)程序是如何操作Excel文檔的。
      希望這些內(nèi)容對大家有用,感謝閱讀。

      更多閱讀

        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多