<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用Python讀寫Word文檔入門

          共 3578字,需瀏覽 8分鐘

           ·

          2021-11-26 14:53

          最近有同事需要批量出500Word文檔,按照1個Word文檔耗時1分鐘來算也需要8.33小時足足有1天工時。于是,這位同事找到了才哥幫忙,才哥接過需求花了不到30分鐘寫好腳本,運行腳本不到1分鐘就生成了500份Word文檔并且進(jìn)行了分類歸檔!

          這就是Python的魅力,讓工作更輕松!

          今天,我們就來了解一下用Python讀寫Word文檔。未來,我將再出兩期進(jìn)行補充介紹,一篇是批量生成Word文檔的方法(也就是我搞定同事需求的案例),另外一篇是詳解Python寫Word(包含可能你都不知道的各種Word格式),敬請期待哈~

          目錄:

          • 1. 安裝模塊

          • 2. 讀取Word文檔

          • 3. 寫入Word文檔


          1. 安裝模塊

          這里我們用到的是python-docx模塊,讀寫Word文檔的操作均有它完成!

          #?安裝該模塊,在命令行鍵入以下命令
          pip?install?python-docx

          在進(jìn)行后續(xù)介紹前,我們先簡單了解一下Word文檔。和純文本(比如txt)相比, .docx文件有很多種結(jié)構(gòu),這些結(jié)構(gòu)在python-docx中用3種不同的類型來表示:最高一層是Document對象表示文檔,每個Document對象包含一個Paragraph 對象也就是段落組成的列表,而每個Paragraph對象則包含一個Run對象的列表,至于Run對象大家可以通過下面的段落Paragraph來了解。

          多個Run對象組成的Paragraph

          我們知道Word里的文本包含有很多格式,比如字體、字號、粗體/斜體、顏色等等。一個Run對象是具有相同格式的文本,當(dāng)發(fā)生變化的時候就需要一個新的Run對象,這也就是上圖中1個Paragraph對象有4個Run對象的原因。

          理解以上知識后,我們再來了解讀與寫吧。


          2. 讀取Word文檔

          我們本地創(chuàng)建一個案例文檔,用于演示讀取Word,案例文檔內(nèi)容如下:

          案例.docx

          可以看到文檔一共有四行,兩行標(biāo)題以及兩行正文。

          import?docx
          #?讀取Word文檔
          doc?=?docx.Document(r'案例.docx')

          我們知道了讀取Word每個paragraph段落和Run,那么如何讀取完整的Word文本內(nèi)容呢?這里,自定義一個函數(shù)將全部的paragraph段落內(nèi)容存起來,每個paragraph段落之間用換行符\n隔開即可。

          import?docx

          def?getText(fileName):
          ????doc?=?docx.Document(fileName)
          ????TextList?=?[]
          ????for?paragraph?in?doc.paragraphs:
          ????????TextList.append(paragraph.text)
          ????
          ????return?'\n'.join(TextList)

          我們調(diào)用該函數(shù),可以得到:

          fileName?=?r'案例.docx'
          print(getText(fileName))
          標(biāo)題1
          這是一個段落,有粗體和斜體
          大家好,我是才哥。
          標(biāo)題2

          當(dāng)然了,這里讀取后輸出顯示的文本不帶有格式屬性哈。


          3. 寫入Word文檔

          在寫入Word之前,我們先簡單了解下Word的一些格式規(guī)則。

          毫不夸張的講,把全局樣式玩的明白的人蠻少的。這方面主要是正文樣式與標(biāo)題樣式,如果玩得明白的話,其實設(shè)置好了之后幾乎不需要再進(jìn)行啥調(diào)整,全局格式都能自動設(shè)置與更新。就我所見的大多數(shù)朋友的文檔,這方面基本達(dá)不到。(感覺會被爆錘~~)

          全局樣式

          比如,我們可以設(shè)置正文樣式為 微軟雅黑字體,字號12,縮進(jìn),間距等等;設(shè)置標(biāo)題樣式為 微軟雅黑字體,字號14,刪除段落后間距等等。

          在我們Python處理Word的時候,段落樣式可以應(yīng)用于 Paragraph 對象,字符樣式可以應(yīng)用于 Run 對象,鏈接的樣式可以應(yīng)用于這兩種對象。可以將 ParagraphRun 對象的 style 屬性設(shè)置為一個字符串,從而設(shè)置樣式。這個字符串應(yīng)該是一種樣式的名稱。如果 style 被設(shè)置為 None,就沒有樣式與 ParagraphRun 對象關(guān)聯(lián)。

          當(dāng)然,這里我們不展開介紹,就簡單介紹Run對象上的字符屬性。關(guān)于更多的介紹,我們放在第三期的 詳解Python寫Word里

          對于Run對象的字符text屬性,都有3個狀態(tài):True(啟用)、False(禁用)和None(默認(rèn))。

          text屬性有哪些?看下表:

          屬性描述
          bold文本以粗體出現(xiàn)
          italic文本以斜體出現(xiàn)
          underline文本帶下劃線
          strike文本帶刪除線
          double_strike文本帶雙刪除線
          all_caps文本以大寫首字母出現(xiàn)
          small_caps文本以大寫首字母出現(xiàn),小寫字母小兩個點
          shadow文本帶陰影
          outline文本以輪廓線出現(xiàn),而不是實心
          rtl文本從右至左書寫
          imprint文本以刻入頁面的方式出現(xiàn)
          emboss文本以凸出頁面的方式出現(xiàn)

          我們演示一下:

          調(diào)整樣式

          以上就是對段落的一些簡單介紹及演示,接下來,我們來看看怎么創(chuàng)建并寫入Word

          要創(chuàng)建自己的.docx 文件,就調(diào)用 docx.Document(),返回一個新的、空白的 Word Document 對象 ?。Document 對象的 add_paragraph()方法將一段新文本添加到文檔中,并返回添加的 Paragraph 對象的引用。在添加完文本之后,向 Document 對象的 save()方法傳入一個文件名字符串,將 Document 對象保存到文件。

          import?docx

          doc?=?docx.Document()
          doc.add_paragraph('這是一個段落')
          doc.save('寫入word.docx')
          寫入word

          我們可以添加段落、設(shè)置段落文本樣式等等,比如:

          import?docx

          doc?=?docx.Document()
          p1?=?doc.add_paragraph('這是一個段落')
          p1.add_run('加粗的一句話').bold?=?True
          doc.add_paragraph('這是第二個段落')
          doc.save('多段落.docx')
          多段落

          我們還可以添加一個段位,這個段落為標(biāo)題樣式,這里需要用到add_heading()。它有兩個參數(shù),字符串表示文本內(nèi)容,后面數(shù)字是標(biāo)題層級。

          import?docx

          doc?=?docx.Document()
          doc.add_heading('標(biāo)題',0)
          doc.add_heading('標(biāo)題1',1)
          doc.add_heading('標(biāo)題2',2)
          doc.add_heading('標(biāo)題3',3)
          doc.add_heading('標(biāo)題4',4)
          doc.save('標(biāo)題.docx')
          標(biāo)題

          同樣,我們還可換行與換頁操作。

          要添加換行符(而不是開始一個新的段落),可以在 Run 對象上調(diào)用 add_break()方法,換行符將出現(xiàn)在它后面。如果希望添加換頁符,可以將 docx.text.WD_BREAK.PAGE作為唯一的參數(shù),傳遞給 add_break() ?。

          import?docx

          doc?=?docx.Document()
          p1?=?doc.add_paragraph('這是一個段落')
          p1.add_run('加粗的一句話').bold?=?True
          #?換行
          doc.paragraphs[0].runs[0].add_break()
          doc.save('換行.docx')
          換行

          有人會說,一般word里還有圖片嘛,當(dāng)然咱們也能搞定添加圖片

          有一個 add_picture()方法,可以在段落末尾添加圖像 。

          import?docx

          doc?=?docx.Document()
          doc.add_paragraph('這是一個段落,后面帶圖片')
          doc.add_picture('圖片.png',?
          ????????????????width=docx.shared.Inches(3),
          ????????????????height=docx.shared.Cm(4))
          doc.add_paragraph('這是第二個段落')
          doc.save('圖片.docx')
          添加圖片

          以上就是本次的簡單入門介紹。

          其實Word文檔各種樣式設(shè)置,數(shù)據(jù)類型展示等等非常豐富,而Python-docx這個模塊其實也能進(jìn)行大多數(shù)的處理。不過,日常中我們用到的功能也沒那么多,此部分留作后續(xù)詳情講解哈。

          如果你喜歡本系列,還請點贊+在看支持啦~~

          瀏覽 42
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人人草人人爱 | 青春草在线观看国产 | 大屌操美女 | 嫩逼网| 婷婷亚洲激情 |