如何用 Python 實現 Word 文檔操作?

2021-02-13 頂級程式設計師

本文主要講解Python中操作word的思路。

一、Hello,world!

使用win32com需要安裝pypiwin32

推薦使用python的IDLE,交互方便

1、如何新建文檔

from win32com.client import Dispatch
app = Dispatch('Word.Application')doc = app.Documents.Add()

按F5運行,發現什麼效果都沒有, 這是因為Word被隱藏了。

2、如何顯示Word

運行後,熟悉的Word界面出現。現在來輸入文字。

3、如何輸入

我們在Word中輸入文字時,一般會先使用滑鼠點擊需要輸入文字的位置,這個過程是獲得了光標焦點。

當我們需要替換某些文字時,首先會選中某些文字,然後再輸入、被選擇的文字呈現出灰色的背景,表示被選中了。

光標焦點和選擇範圍在Word中,都是Selection。什麼都沒選擇的光標焦點,和選擇了整片文章的選擇範圍,代表了Selection的最小和最大範圍。

這也是為什麼整個Word中只能有一個Selection的原因。因為光標或者選擇範圍就只能有一個。

s = app.Selections.Text = 'Hello, world!'

此時,s的範圍為'Hello, world!'這句話的選擇區域。

能如此方便的調用Word,得益於其底層的COM(組件對象模型)可以被任意語言調用。

Selection是Word對象模型中的類,此處的s是它的對象(實例)。

4、如何查看選擇區域是什麼

s.Text可以查看或者設置s選擇區域的文本。Word對象模型中很多對象都有默認屬性,Text就是Selection的默認屬性,類似python的__str__方法。運行s()調用s的默認屬性,此處等于于運行了s.Text。

控制臺顯示,s的範圍為'Hello, world!'這句話的選擇區域。

二、對Word對象模型的簡單理解

Word中最重要的類(對象)有以下幾個。

1、Application對象:Word應用。Application包含了菜單欄、工具欄、命令以及所有文檔等。

app = win32com.client.Dispatch('Word.Application')

2、Document對象:文檔。可以有多個Document,就像Word可以打開多個文檔。

使用下列代碼新建文檔或者打開文檔


doc = app.Documents.Add()doc = app.Documents.Open('你的Word文件路徑')

3、Selection對象:選區:代表當前窗口的選區。它可以是文檔中的選擇(高亮)區域,也可以是插入點(如果沒有什麼被選中)。同一時間只能激活一個Selection。

在Word中,按下Alt+F11打開宏編輯器

然後按下F2打開對象瀏覽器

輸入selection並回車,發現成員一列中完全匹配Selection的只有4個類,這表示只有這些類的Selection屬性可以返回Selection對象(如圖)。

Application我們前面介紹過,其它的類可以用同樣的方法查詢如何獲得。

s.Text = 'Hello, world!'s.TypeText('Hello, world!')s.Copy()s.Paste()

Text和TypeText的不同在於完成後的選區:

Text:輸入的文本(前例中選區為'Hello, world!');

TypeText:文本後的插入點(前例中選區為!後的插入點)。

s.Start = 0s.End = ns.Delete() s.WholeStory() s.MoveLeft()s.MoveRight(1, 2)


所有能獲得Selection的類

4、Range對象:連續區域。Range表示一個連續區域。Range由Start和End位置定義,用來區分文檔的不同部分。Range是獨立於Selection的。不管Selection是否改變,都可以定義和操作Range。文檔中可以定義多個Range。這個連續區域同樣可以小到一個插入點,大到整個文檔。Selection有Range屬性,而Range沒有Selection屬性。

當使用Range(Start, End)方法來指定文檔的特定範圍時。文檔的第一個字符位置為0,最後一個字符的位置和文檔的字符總數相等。不提供參數時代表選擇所有範圍。

r = doc.Range()r = s.Range()

Word中有很多對象的Range屬性都能返回Range對象,請在Word-宏編輯器-對象瀏覽器中自己查詢。

因為本文僅使用Selection就可以達到效果,Range的很多屬性和方法和Selection是類似的。

5、Font對象:字體。包含對象的字體屬性(字體名稱、字號、顏色等)。

font = s.Fontfont = r.Font

同樣,其餘獲得方法可在Word-宏編輯器-對象瀏覽器中查詢。

font.Name = '仿宋'font.Size = 16

ParagraphFormat對象:段落格式。用來設置段落格式,包括對齊、縮進、行距、邊框底紋等。

pf = s.ParagraphFormatpf = r.ParagraphFormat

同樣,其餘獲得方法可在Word-宏編輯器-對象瀏覽器中查詢。

pf.Alignment = 0pf.LineSpacingRule = 0pf.LeftIndent = 21

7、PageSetup對象:頁面設置。代表所有的頁面設置屬性,包括左邊距,底邊距,紙張大小等等。

ps = doc.PageSetupps = s.PageSetupps = r.PageSetup

同樣,其餘獲得方法可在Word-宏編輯器-對象瀏覽器中查詢。

ps.TopMargin = 79ps.PageSize = 7

8、Styles對象:樣式集。Styles包含指定文檔中內置和用戶定義的所有樣式,它返回一個樣式集。其中的每個樣式的屬性包括字體、 字形、 段落間距等。如常見的正文、頁眉、標題1樣式。

normal = styles(-1)
normal.Font.Name = '仿宋'normal.Font.Size = 16

Styles的返回參數,標題1、標題2、標題3分別為-2、-3、-4,頁眉為-32,標題為-63,其他見Styles文檔

三、解決問題思路

因為有很多功能,在文檔中難以直接找到,需要使用如下方法。

1、把想實現的功能,使用word的錄製宏,在宏編輯器裡查看VBA代碼,從而了解大概使用什麼方法。

2、使用在線的 .NET API,從而了解詳細的語法

3、如果不知道從哪獲得實現該功能的對象,則可以使用word宏編輯器的對象瀏覽器(F2鍵),具體見前文Selection部分

4、使用Python的IDLE進行實時交互

app = win32com.client.Dispatch('word.application')app.Visible='True' doc = app.Documents.Open('你的桌面路徑/test.docx') 

然後輸入自己想嘗試的對象屬性或方法。

四、實例:格式化word文件為最新的公文國家標準

只進行兩個部分的設置,一是頁面設置、二是頁碼設置

from win32com.client import Dispatch app=Dispatch('Word.Application')doc = app.Documents.Open('你的word文檔路徑')cm_to_points = 28.35 doc.PageSetup.TopMargin = 3.3*cm_to_points  doc.PageSetup.BottomMargin = 3.3*cm_to_points  doc.PageSetup.LeftMargin = 2.8*cm_to_points  doc.PageSetup.RightMargin = 2.6*cm_to_points  doc.Styles(-1).Font.Name = '仿宋' doc.Styles(-1).Font.NameFarEast = '仿宋' doc.Styles(-1).Font.NameAscii = '仿宋'doc.Styles(-1).Font.NameOther = '仿宋' doc.Styles(-1).Font.Size = 16 doc.PageSetup.LayoutMode = 1 doc.PageSetup.CharsLine = 28 doc.PageSetup.LinesPage = 22 doc.PageSetup.FooterDistance = 2.8*cm_to_points  doc.PageSetup.OddAndEvenPagesHeaderFooter = 0 doc.PageSetup.OddAndEvenPagesHeaderFooter = 0 w = doc.windows(1)  w.view.seekview = 4 s = w.selection  s.headerfooter.pagenumbers.startingnumber = startingnumber  s.headerfooter.pagenumbers.NumberStyle = 0  s.WholeStory() s.Delete() s.headerfooter.pagenumbers.Add(4)  s.MoveLeft(1, 2)  s.TypeText('— ')  s.MoveRight() s.TypeText(' —') s.WholeStory() s.Font.Name = '宋體's.Font.Size = 14 s.paragraphformat.rightindent = 21 s.paragraphformat.leftindent = 21 doc.Styles('頁眉').ParagraphFormat.Borders(-3).LineStyle = 0 

-END-

轉載聲明:本文選自「Python中文社區」。

重磅推出全新學習模式
用打卡學Python
每天30分鐘
30天學會Python編程

世界正在獎勵堅持學習的人!

相關焦點

  • 使用 Python 操作 word文檔
    最近手頭有一個需求是對word文檔內容進行判斷,搜索到一個包感覺不錯,簡單記錄一下關鍵操作:python-docx能做什麼
  • 牛逼,竟然可以用 Python 操作 Word 文檔,這麼多的騷操作!
    # 如何獲得app = win32com.client.Dispatch('Word.Application')2、Document對象:文檔。可以有多個Document,就像Word可以打開多個文檔。
  • 從PPT到Word,用Python輕鬆實現辦公自動化
    來源  | 早起Python(ID:zaoqi-python)在之前的自動化系列文章中,我們分別講過如何使用 Python 將 Word 中表格信息批量提取至
  • python操作Excel、Word、PDF大全
    python自動化辦公(python操作Excel、Word、PDF)的文章都很喜歡,並希望能夠應用到工作中去。目錄一:python操作excel 1、openpyxl庫介紹2、python怎麼打開及讀取表格內容?sheet.cell(row=, column=)方式3、python如何向excel中寫入某些內容?
  • 教你如何用Python輕輕鬆鬆操作Excel、Word、CSV,一文就夠了,趕緊碼住!!!
    寫入 Word平時我們在操作 Word 寫文檔的時候,一般分為幾部分:標題、章節、段落、圖片、表格、引用以及項目符號編號等。下面我們就按這幾部分如何用 Python 操作來一一介紹。# 新增文檔標題doc1.add_heading('如何使用 Python 創建和操作 Word',0)# 保存文件doc1.save('word1.docx')這樣就完成了創建文檔和文章標題的操作,下面運行程序,會生成名為 word1.docx 的文檔,打開文章顯示如下圖所示:
  • 【Python基礎】python使用python-docx操作word
    1、python-docx庫介紹該模塊兒可以創建、修改Word(.docx)文件;python-docx使用官網:python-docx官網我們在安裝此模塊兒使用的是pip install python-docx,但是在導入的時候是import docx;2、Python讀取Word文檔內容注意:每進行一個操作,必須保存一下,否則等於白做;1)word文檔結構介紹在這裡插入圖片描述2)python-docx
  • Python自動化辦公系列之Python操作Word
    python使用python-docx操作word1、python-docx庫介紹該模塊兒可以創建、修改Word(.docx)文件;python-docx使用官網:python-docx官網(https://python-docx.readthedocs.io/en/latest/)我們在安裝此模塊兒使用的是
  • Python Word文檔自動化,萬字乾貨教程
    Python視界分享來源|超級大洋蔥806環境安裝 使用Python操作word大部分情況都是寫操作,也有少許情況會用到讀操作
  • 別再問我Python怎麼操作Word了!
    前言在之前的自動化系列文章中,我們分別講解過👉Python操作Excel利器openpyxl,也講過👉Python操作PDF的幾種方式,今天我們將通過代碼講解Python操作Word文檔docx的常用方法。
  • 用Python製作詞雲,Wordcloud神器值得擁有!
    今天我們要嘗試的,是使用通用的程式語言python來製作詞雲。python這門程式語言非常地簡單易用,即使看起來很複雜的設置,python用一個庫和幾條代碼就能搞定了~第一步:下載並安裝Anaconda進入Anaconda官網,選擇適合你電腦的版本,推薦下載使用python3.6版本,因為在最新的版本當中,許多
  • 史上最全的python-docx操作Word內容
    什麼是風格以及樣式當文檔中文字或段落的格式一致時,文檔讀下來會更好。為了實現一致性,專業的文檔設計人員開發了一個樣式表,它定義了文檔元素類型並指定了每個元素應該如何格式化。比如:介紹做一件事情時,第一步,第二步,第三步,第四步。每一個步驟我都放在了一個段落中去描述。
  • Python-Docx庫 | Word與Python的完美結合(附使用文檔)
    日常需要經常處理Word文檔,用Python的免費第三方包:Python-Docx處理docx十分方便。而且這個包和pandas包結合使用,可以在word插入excel表格,節省了很多複製、粘貼、調整表格樣式的時間,真的很方便!但是要注意:Python-Docx只能處理docx、docx、docx文件!
  • 用 Python 將微信熱文轉換成Word文檔 | 神級操作
    那麼如何保存一個好的文章呢?普遍選擇收藏,然而在這裡,我提供一個更巧妙的方法,直接轉換成word文檔保存在電腦裡面。即便是以後文章404了,我們還可以看得到嘛。word文檔,題目肯定少不了。2、設計代碼,步步分析這一步我們需要開始編寫代碼了,python-docx是一個生成和處理docx的第三方庫,使用pip install python-docx 一鍵下載需要用到的第三方庫有,python-docx,bs4(用於html解析處理)from docx import Document
  • Word文檔批量轉換成PDF文檔(簡單腳本操作)
    對於平常工作的朋友們來說,需要將word文檔轉換成pdf文件,對於一個一個的轉換可能直接另存為就可以將文件轉換了,但是如果有大量的文件
  • 用 Python 操作 PPT 的自動化辦公教程
    基於此,我花了整整一周時間真理出來的python自動化文檔手冊,涉及到五個章節(如下圖所示),① python使用openpyxl操作excel;② python使用PyPDF2和pdfplumber操作pdf;③ python使用python-docx操作word;④ python使用python-pptx操作PPT;⑤ python如何自動收發郵件;⑥ python製作電話號碼歸屬地查詢工具。
  • word文檔的基本操作使用教程步驟圖
    我們平時工作中經常用到word文檔,有時候word到底都是怎麼操作的我們總是記不住,他的基本操作都有哪些呢?
  • python自動化辦公系列 | word利器,python-docx 庫-1
    第一個的系統化的分享專題——python辦公自動化。代碼後面的#所表示的是注釋,對本行代碼進行解釋的內容,用#號開頭是讓程序理解這是注釋不需要運行的意思。本模板旨在分享和解讀完整代碼,只要你有安裝配置好python環境,在pycharm裡安裝相應的第三方文件庫,黏貼代碼即可運行,我會儘量在代碼後面都進行標註解讀。我們以實用型為目的學習。編程類學習,從模仿中掌握突破。
  • Python與word的自動化
    前言最近在研究python這塊如何讀取並創建word的內容,受益頗多。
  • 如何將word文檔保存為不能複製、修改的word文檔?
    自己辛辛苦苦寫出來的word文檔,在分享的時候被人隨意修改,煩不勝煩,如何才能保證自己辛苦寫出來的文章不被他人篡改呢?
  • Pdf轉Word用Python輕鬆搞定!
    今天,小編就帶領大家利用python來實現如何將pdf的內容轉化為word文檔。同時我們還將提取pdf中的圖片,保存到我們的指定文件夾內。01.文字的提取我們首先要做的是對於pdf中文本的提取,如下圖所示: