本文目錄一覽:
python合併word
合併多個 word文件到 一個文件 中,用於文件的批量打印。
要求:
採用 python 實現,使用python中的 python-docx 和 docxcompose 結合的方式來實現此功能。
優點:
缺點:
只支持docx 文件的合併, 不支持doc文件 。如想通過此模式合併doc文件,需將doc文檔轉換為docx文檔。
將一個文件夾中的所有文件,都合併到一個文檔中。
要求每個文檔,都從一個新頁面開始,因此需在除第一個文檔的每個文檔前面加上 分頁符 ,所以單獨定義了一個只包含分頁符的文檔 page_break_doc 。
部分情況下會出現問題,如文檔當前已經到 最後一行 了,新加的分頁符會導致生成一頁空白的文件, 此種情況,後續更新此文章時解決 。
定義目標文檔,初始化時,採用 target_doc = Document(source_file_path_list[0]) 的方式,以第一個要拼接的文檔作為初始文檔。
主要是因為,如果創建的空的文檔 target_doc = Document() ,新生成的文檔中 自帶的文檔樣式 (如標題樣式、正文樣式等) 將會影響新拼接的文檔中的採用了默認樣式的內容 ,故模板文檔從第一個文檔中進行加載默認樣式,避免了這種情況。
這也是網上大多數採用此種方式合併word,樣式發生變更的原因 ,需注意此問題。
同時需注意,如果拼接的文檔中,存在默認格式不一樣,並且未為段落、文字指定單獨樣式的情況時,需檢查,第一個文件作為模板加載的默認樣式, 是否會影響後續的其他文件合併後的默認樣式 。
200個文件合併,耗時10秒左右。速度非常快
python腳本的程序,其他程序可以直接通過 命令行的形式調用 ,或者python提供http接口,程序通過 http接口調用 。
切記通過http接口調用其他程序是,需設置好調用超時時間,防止無限等待請求結果,導致負載均衡時,大量請求超時而導致的程序整體不再分發請求。
Python Word文檔處理 上篇:python-docx
某天我收到一個需求:希望能夠用python對word文檔進行一些處理,比如更換一些文字以及添加批註。
簡單搜索後,我發現 python-docx 是一個處理docx文檔的常用python庫,因此我打算用它來進行進一步開發。
官方文檔 提供了一個簡單的示例
python-docx 將文檔抽象為document對象、paragraph對象以及run對象,提供了圍繞這些對象進行簡單處理的API
然而在文檔中並沒有出現關於批註操作的部分,我在搜尋 一些文章 後發現了在某個 issue 中提及了添加批註相關信息,然而還是沒有得到具體的解決辦法
docx文檔底層是由XML文件組成的
我們可以將一個 xx.docx 文件的後綴名改為 .rar 然後將其手動解壓,可以得到下面這些文件
在諸多文件當中主要用到的是 document.xml 文件,這裡保存了文檔的內容
打開一份 document.xml 文件,拋開header、footer、table以及其他特殊項,去掉樣式等修飾項,一份樸素的docx文檔主要可以分為三個部分:paragraph、run、text
paragraph即段落,就是我們在word當中看到的一段。text即文本,就是真實的內容。run比較抽象,我們可以將其理解為片段,即語句的切分。
為了更好地理解run是什麼,打開一篇word文檔定位其中一句話
讓我們看看這篇文檔解壓之後的 document.xml 文件中對應的部分
OK,我們可以看到原本完整的一句話在word中被拆分成了許多個 w:r 標籤,這就是 run ,word切分 run 的規則很多,有的根據標點符號,有的根據中文分詞,句子中如果存在不同樣式的字詞也會單獨切分出來,因此我們很難預估一句話究竟會被分成幾個片段。
在issue中搜索comment關鍵字發現在一個 merge request 上已經給出了添加批註的解決方案,可以通過 paragraph 對象上的 add_comment 方法給一個段落添加批註
但這還是不符合我的需求,我的目標是精準添加到某個詞或者短語上
打開 這個貢獻者的源碼 進行研究
其實就是在P標籤內插入comment標籤引用,同時添加comment標籤到xx文件
同理我們可以在r標籤內插入comment標籤引用,同時添加comment標籤到xx文件,這樣就能實現給特定詞添加批註的需求了
python docx 使用總結
本文將總結之前在使用 python-docx 包處理 word 文檔時的一些理解與經驗。
安裝
引入
python-docx 將整個文章看做是一個 Document 對象 官方文檔 – Document ,其基本結構如下:
在 python-docx 中, run 是最基本的單位,每個 run 對象內的文本樣式都是一致的,也就是說,在從 docx 文件生成文檔對象時, python-docx 會根據樣式的變化來將文本切分為一個個的 Run 對象。
你也可以通過它來處理表格 官方文檔 – 表格 ,基本結構如下:
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/183132.html