使用ABAP程式設計實現對微軟Office Word文件的操作

i042416發表於2018-08-16

SAP ABAP裡提供了一個標準的類CL_DOCX_DOCUMENT,提供了本地以".docx"結尾的微軟Office word文件的讀和寫操作。

本文介紹了ABAP類CL_DOCX_DOCUMENT的簡單用法。

使用ABAP程式設計實現對微軟Office Word文件的操作

Office OpenXML

從微軟 Office2007開始, 當我們新建一個word文件時,其副檔名從“.doc"變為了".docx",後者是基上遵循了一個開源的規範:Office openXML格式。

例如下圖,我建立了一個最簡單的word文件,包含了一個Header 區域,一個由三行彩色文字組成的段落,還有一張圖片。

使用ABAP程式設計實現對微軟Office Word文件的操作

我們把這個文件儲存到本地,將其副檔名從.docx改成.zip, 然後雙擊,就可以用解壓軟體比如winrar開啟。

於是發現這一個最簡單的word文件實際上由如此多的xml和資料夾構成。

使用ABAP程式設計實現對微軟Office Word文件的操作

使用CL_DOCX_DOCUMENT讀取word檔案內容

示例程式碼如下:

DATA: lv_content TYPE xstring,
lo_document TYPE REF TO cl_docx_document.
PERFORM get_doc_binary USING 'C:Usersi042416Desktop est.docx' CHANGING lv_content.
lo_document = cl_docx_document=>load_document( lv_content ).
CHECK lo_document IS NOT INITIAL.
DATA(lo_core_part) = lo_document->get_corepropertiespart( ).
DATA(lv_core_data) = lo_core_part->get_data( ).
DATA(lo_main_part) = lo_document->get_maindocumentpart( ).
DATA(lo_image_parts) = lo_main_part->get_imageparts( ).
DATA(lv_image_count) = lo_image_parts->get_count( ).DO lv_image_count TIMES.
DATA(lo_image_part) = lo_image_parts->get_part( sy-index - 1 ).
DATA(lv_image_data) = lo_image_part->get_data( ).
ENDDO.
DATA(lo_header_parts) = lo_main_part->get_headerparts( ).
DATA(lv_header_count) = lo_header_parts->get_count( ).DO lv_header_count TIMES.
DATA(lo_header_part) = lo_header_parts->get_part( sy-index - 1 ).
DATA(lv_header_data) = lo_header_part->get_data( ).
ENDDO.

上述程式碼的簡要說明

1. 將word文件的二進位制內容傳入方法cl_docx_document=>load_document,得到一個文件物件引用,然後就可以藉助該物件引用呼叫各種方法了。

2. word文件的建立者,建立時間,最後修改時間等資訊都儲存在所謂的“Core property part”內,可以透過方法lo_document->get_corepropertiespart獲得"Core property part"的引用,再使用該引用呼叫方法get_data獲得實際內容。

下圖是get_data返回的內容的一個例子,可以看出是xml格式。

使用ABAP程式設計實現對微軟Office Word文件的操作

3. 現在我們準備讀取word文件的正文了。使用方法lo_document->get_maindocumentpart得到word文件正文,文字的字型型別,顏色也包含在內。如下圖所示:

使用ABAP程式設計實現對微軟Office Word文件的操作

使用ABAP程式設計實現對微軟Office Word文件的操作

4. Word文件裡插入的圖片的二進位制內容當然也是可以讀取出來的。使用方法:lo_image_parts->get_part返回。

同樣的思路,微軟Office 2007之後版本的其他格式的辦公文件,比如Powerpoint和Excel等,均遵循Office OpenXML標準,因此將其字尾名改為.zip後同樣可以看到大量xml和資料夾。ABAP也同樣提供了標準程式碼來讀寫這些Office文件,例如CL_PPTX_DOCUMENT, CL_XLSX_DOCUMENT等等,如下圖所示。

使用ABAP程式設計實現對微軟Office Word文件的操作

要獲取更多Jerry的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:


使用ABAP程式設計實現對微軟Office Word文件的操作

使用ABAP程式設計實現對微軟Office Word文件的操作


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2200194/,如需轉載,請註明出處,否則將追究法律責任。

相關文章