欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

用 Python 操作 Word 文檔

系統 1706 0
原文鏈接: https://jinshuju.net/f/kb1Bcq

用 Python 操作 Word 文檔_第1張圖片

圖片來源于網絡

?

作者:贠云龍

Blog:?zhihu.com/people/yunlongyun

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

一、Hello,world!

使用win32com需要安裝pypiwin32

              
                pip?install?pypiwin32
              
            

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

1、如何新建文檔

              
                from?win32com.client?import?Dispatchapp?=?Dispatch('Word.Application')#?新建word文檔doc?=?app.Documents.Add()
              
            

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

2、如何顯示Word

              
                app.Visible?=?1
              
            

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

用 Python 操作 Word 文檔_第2張圖片

3、如何輸入

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

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

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

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

              
                #?運行下句代碼后,s獲得新建文檔的光標焦點,也就是圖中的回車符前s?=?app.Selection#?用“Hello,?World!“替換s代表的范圍的文本s.Text?=?'Hello,?world!'
              
            

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

用 Python 操作 Word 文檔_第3張圖片

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

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

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

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

              
                s()
              
            

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

用 Python 操作 Word 文檔_第4張圖片

二、對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。

  • 如何獲得

              
                s?=?app.Selection
              
            

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

用 Python 操作 Word 文檔_第5張圖片

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

用 Python 操作 Word 文檔_第6張圖片

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

用 Python 操作 Word 文檔_第7張圖片

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

  • 如何使用Selection輸入

              
                #?替換當前選擇s.Text?=?'Hello,?world!'#?輸入s.TypeText('Hello,?world!')#?把當前選擇復制到剪貼板s.Copy()#?粘貼剪貼板中的內容s.Paste()
              
            

Text和TypeText的不同在于完成后的選區:

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

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

  • 如何變更Selection

              
                #?使用Start,End指定字符范圍s.Start?=?0s.End?=?n# s從第0個字符(第1個字符前的插入點)到第n個字符。#?漢字是每字為1字符#?相當于按下Delete鍵s.Delete()?#?相當于按下Ctrl+As.WholeStory()?#?向左移動s.MoveLeft()#?向右移動2個字符,第1個參數是移動單位WdUnits,見下圖s.MoveRight(1,?2)
              
            

用 Python 操作 Word 文檔_第8張圖片

640?wx_fmt=jpeg

所有能獲得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.Font#?或font?=?r.Font
              
            

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

  • 如何使用

              
                #?字體設置為仿宋,電腦上必須安裝有該字體font.Name?=?'仿宋'#?字號設置為三號font.Size?=?16
              
            
  1. ParagraphFormat對象:段落格式。用來設置段落格式,包括對齊、縮進、行距、邊框底紋等。

  • 如何獲得

              
                pf?=?s.ParagraphFormat#?或pf?=?r.ParagraphFormat
              
            

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

  • 如何使用

              
                #?左、中、右?對齊分別為0,?1,?2,其他對齊方式見.NET?文檔中的ParagraphFormatpf.Alignment?=?0#?單倍、1.5倍、雙倍行距分別為0,?1,?2,其他見ParagraphFormat文檔pf.LineSpacingRule?=?0#?指定段落的左縮進值為21磅。pf.LeftIndent?=?21
              
            

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

  • 如何獲得

              
                ps?=?doc.PageSetup#?或ps?=?s.PageSetup#?或ps?=?r.PageSetup
              
            

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

  • 如何使用

              
                #?上邊距79磅?ps.TopMargin?=?79#?頁面大小,A3、A4分別為6,7ps.PageSize?=?7
              
            

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

  • 如何獲得

              
                #?只能通過文檔獲得styles?=?doc.Styles
              
            
  • 如何使用

              
                #?返回正文樣式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'?#?讓word程序可見,這樣在交互命令行做的修改就可以實時顯示doc?=?app.Documents.Open('你的桌面路徑/test.docx')?#?word文件放在桌面方便手動修改
              
            

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

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

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

              
                from?win32com.client?import?Dispatch?#需要安裝的是pypiwin32模塊app=Dispatch('Word.Application')doc?=?app.Documents.Open('你的word文檔路徑')#?頁面設置cm_to_points?=?28.35?#?1厘米為28.35磅#?國家公文格式標準要求是上邊距版心3.7cm#?但是如果簡單的把上邊距設置為3.7cm#?則因為文本的第一行本身有行距#?會導致實際版心離上邊緣較遠,上下邊距設置為3.3cm#?是經過實驗的,可以看看公文標準的圖示#?版心指的是文字與邊緣距離doc.PageSetup.TopMargin?=?3.3*cm_to_points??#?上邊距3.3厘米doc.PageSetup.BottomMargin?=?3.3*cm_to_points??#?下邊距3.3厘米doc.PageSetup.LeftMargin?=?2.8*cm_to_points??#?左邊距2.8厘米doc.PageSetup.RightMargin?=?2.6*cm_to_points??#?右邊距2.6厘米#?設置正常樣式的字體#?是為了后面指定行和字符網格時#?按照這個字體標準進行doc.Styles(-1).Font.Name?=?'仿宋'?#?word中的“正常”樣式字體為仿宋doc.Styles(-1).Font.NameFarEast?=?'仿宋'?#?word中的“正常”樣式字體為仿宋doc.Styles(-1).Font.NameAscii?=?'仿宋'#?word中的“正常”樣式字體為仿宋doc.Styles(-1).Font.NameOther?=?'仿宋'?#?word中的“正常”樣式字體為仿宋doc.Styles(-1).Font.Size?=?16?#?word中的“正常”樣式字號為三號doc.PageSetup.LayoutMode?=?1?#?指定行和字符網格doc.PageSetup.CharsLine?=?28?#?每行28個字doc.PageSetup.LinesPage?=?22?#?每頁22行,會自動設置行間距#?頁碼設置doc.PageSetup.FooterDistance?=?2.8*cm_to_points??#?頁碼距下邊緣2.8厘米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()?#移動到頁碼末尾,移動了一個字符距離#?默認參數是1(字符)s.TypeText('?—')?s.WholeStory()?#?擴選到整個頁眉頁腳部分,此處是必要的#?否則s只是在輸入一字線后的一個光標,沒有選擇區域s.Font.Name?=?'宋體's.Font.Size?=?14?#頁碼字號為四號s.paragraphformat.rightindent?=?21?#頁碼向左縮進1字符(21磅)s.paragraphformat.leftindent?=?21?#?頁碼向右縮進1字符(21磅)doc.Styles('頁眉').ParagraphFormat.Borders(-3).LineStyle?=?0?#?頁眉無底邊框橫線
              
            

參考文章:

              
                Python通過win32實現office自動化https://blog.csdn.net/lzl001/article/details/8435048引用Microsoft?Word?對象的技術及實現https://www.docin.com/p-1333941826.htmlWord組件對象模型https://blog.csdn.net/wishfly/article/details/39959349
              
            


用 Python 操作 Word 文檔_第9張圖片

▼ 點擊成為 社區注冊會員? ? ? ? ?? 「在看」 一下,一起PY!


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产视频首页 | 国产国语一级a毛片高清视频 | 三级在线观看视频 | 欧美性免费视频 | 五月天丁香久久 | 黄色国产在线视频 | 日韩在线免费 | 大学生一级毛片全黄真人 | 午夜视频网址 | 亚洲午夜精品视频 | 欧美影院入口 | 欧美日韩第二页 | 丁香久久 | 精品一区二区三区在线视频 | 在线免费观看网址 | 日韩一区二区三区视频 | 久久蜜桃亚洲一区二区 | 精产国产伦理一二三区 | www.久久久久久久久 | 亚洲欧美小视频 | 久草福利资源网站免费 | 亚洲一二三区在线观看 | 国产午夜精品AV一区二区 | 中文字幕 欧美 日韩 | aⅴ色国产 欧美 | 国产美女一区二区 | 日本韩国三级在线 | 国产一区在线免费观看 | 五月天激情综合网 | 91国内精品久久久久免费影院 | 二区视频 | 91青青青国产在观免费影视 | 中文字幕亚洲一区二区三区 | 成片在线看一区二区草莓 | 国产高清美女一级a毛片久久 | 亚洲国产一区二区视频 | 久久一日本道色综合久久 | 国产精品国偷自产在线 | 91短视频免费观看 | 精品国产一区二区三区成人影院 | 一区二区三区免费看 |