大家好,這裡是地鐵慢步,快慢的慢,因為筆者業餘學的python編程,學得的確也算是慢,慢不打緊,一直在進步就好。
今天想教大家怎麼實現通過python編程來修改word文檔。熟悉word的人,可能會覺得多此一舉,直接用OFFICE或者WPS就可以了啊,幹嘛要用python?
慢步在工作中也有用到word,而且很大一部分時間都是在做重複性工作,而且上班用的不是自己的固定電腦,也不好用word宏。這樣慢步有個設想,通過python創造一個小型程序,進行word文檔的批量修改。
現在先實現第一個簡單的功能:修改word文檔內標題。
先創建有一個Word文檔。
慢步隨便搜索了一個通知,複製粘貼到新建的word文檔中,保存為標題的名字。文檔暫時保存在桌面吧。
新建項目、py文件、置入word文檔
用慢步喜歡的IDE(集成開發環境)pycharm,打開pycharm,新建一個項目。
File - New Project
新建一個changeheadline的項目。
如圖,打開目錄,點第二個DeskTop(桌面),新建一個文件夾,再輸入框內輸入文件夾的名字changeheadline。點OK,再點OK,再點右下角Create(創建)。
之後再跳出一個打開新project的提示,選擇ThisWindows(這個窗口)就好。
項目建好了,接著建一個同名的changeheadline.py。
在pycharm內項目目錄處右鍵-New-Python File 輸入py文件名changeheadline即可。
如對新建py文件有疑問可以回看作者的文章pycharm的基本操作,創建項目,新建py文件,編寫代碼及保存
因為路徑問題太複雜,咱選擇一種簡單的方式,把需要修改的word文檔放進項目文件夾裡(即,我們桌面上changeheadline文件夾)
python庫的引用,引用python-docx庫
python程序經常使用已有的功能代碼,這個過程叫引用。
python自帶很多標準庫,比如turtle庫,可以進行基本的圖形繪製;比如time庫,可以處理時間。import time 就可以引用time庫,在後續程序編寫中可以調用time庫的功能。
作為開源的程式語言,python也有很多第三方庫。其中python-docx庫,就是一個可以處理word文檔的庫。功能強大,但慢步找不到漢化版是python-docx庫使用手冊,只能自己到官網閱讀。
標準庫可以直接引用。但第三方庫,需要安裝到電腦上才能引用。不用擔心,pycharm很強大的,直接省了很多複雜的步驟,你可以在pycharm直接安裝第三方庫。
上圖就是慢步已安裝的庫文件。打開的方式為:
File - Setting - Project:changeheadline -Project Interpreter
打開翻譯器,看到窗體的主體部分有三列內容
Package(庫) Version(版本) Latest version(最新版本)
其中跟隨python 3.5.3 一起安裝的庫有兩個 pip 及 setuptools。
怎麼安裝第三方庫?
點Package(庫) Version(版本) Latest version(最新版本)右側的+
輸入想要的安裝的庫名稱python-docx
左下角Install Package(安裝庫文件)。等待安裝成功即可。
這時候,在py文件裡面輸入
import docx
就能實現引用python-docx庫。
實現我們的功能吧
單純描述有點難解釋,慢步選擇直接上圖
慢步寫好了代碼,並運行了。
運行的結果是:在pycharm列印了標題內容,修改標題並另存為相應的word文檔。如上圖。
可以打開新生成的文檔和原來文檔看看。
哈哈O(∩_∩)O哈哈~標題格式變了。
因為慢步這裡直接修改了文檔第一段的文本,如果不設定格式,python-docx庫會用它自己的默認格式。這比較坑了。
這個代碼:
"""word文檔標題修改程序作者:地鐵慢步日期:2020-4-7"""from docx import Documentd = Document("關於調整3月註冊國際投資分析師(CIIA)考試的公告.docx")print(d.paragraphs[0].text)changetotext = "word文檔標題修改程序測試標題"d.paragraphs[0].text = changetotextd.save("word文檔標題修改程序測試標題.docx")慢步決定再修改一下。把修改後的標題及保存的文件名再加個1,這樣就不會覆蓋之前產生的word文檔了。
代碼如下:
"""word文檔標題修改程序作者:地鐵慢步日期:2020-4-7"""from docx import Documentd = Document("關於調整3月註冊國際投資分析師(CIIA)考試的公告.docx")print(d.paragraphs[0].runs[0].text)changetotext = "word文檔標題修改程序測試標題1"d.paragraphs[0].runs[0].text = changetotextd.save(changetotext + ".docx")
再運行後,打開三個文檔,對比如下:
幸不辱命。標題格式還是原來那個。
在python-docx庫裡面,格式由run確定,這是比較難理解的。
代碼的解釋
from docx import Document實現docx庫Document功能的引用在寫這個簡單代碼時,其實也出過錯誤,比如引用庫的格式錯誤。大家注意到這裡引用多了一個from,意思是從python-docx庫裡面引用Document功能。即只引用庫裡面的一部分。
如果直接用import docx,那後面所有與docx庫文件有關的代碼都需要相應加上「docx.」比如第一句應該變為
d = docx.Document("關於調整3月註冊國際投資分析師(CIIA)考試的公告.docx")
d = Document("關於調整3月註冊國際投資分析師(CIIA)考試的公告.docx")打開文檔 關於調整3月註冊國際投資分析師(CIIA)考試的公告.docx 並把文檔賦值給變量d。之後的代碼中d代表這個文檔。print(d.paragraphs[0].runs[0].text)輸出顯示內容,文檔的,段落【0】即第一段的,run【0】的,文本(即標題內容)changetotext = "word文檔標題修改程序測試標題1"定義changetotext變量,賦值為文本內容"word文檔標題修改程序測試標題1"d.paragraphs[0].runs[0].text = changetotext把標題內容修改為changetotext變量的內容d.save(changetotext + ".docx")changetotext + ".docx"是字符串的運算,即把"word文檔標題修改程序測試標題1"與".docx"連在一起,得到"word文檔標題修改程序測試標題1.docx"d.save()就是關閉文檔d,括號內是保存的文檔名,數據類型是字符串,即帶雙引號文本。
有所收穫的話,給慢步點個讚唄。