亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

學習win32com操作word之Range精講

 更新時間:2023年01月19日 09:34:13   作者:一燈編程  
這篇文章主要為大家介紹了win32com操作word之Range精講學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

本集開始,將會深入Document接口。打開或創(chuàng)建一個文檔都會產(chǎn)生一個Document對象,它代表文檔本身,所以絕大部分文檔的操作都會依賴該接口,它的屬性和方法共計374個!說不上很多,但它大部分的接口和屬性都是一個個獨立接口封裝而成的。

但不必擔憂,官方的文檔中顯示,有一部分接口是用于客戶端級編程的,我們只需要學習部分接口足以滿足各種類型的文檔級開發(fā)需求了。

Range是什么

這是本節(jié)課要講的接口,它是Document的方法,但其本身也是一個獨立的接口,方法和屬性共計183個。Range這個接口簡直是word接口中的勞模。它表示資源選中或插入點,可以理解為一個看不見的鼠標,但它比鼠標的作用強大多了。官方也提供了Selection接口,這是正兒八經(jīng)的鼠標,它能和鼠標交互,個人認為Selection適合用在客戶端級開發(fā)的場景,文檔級開發(fā)的場景還是Range好用。

Range的作用

操作文檔中的資源,如選中一段文字,在實操中,得先鼠標選中文字。在word編程中,使用Range就能實現(xiàn)資源的選中,Selection是單例模式,Range可不是,最近的一個Range實例不會覆蓋前面的實例,每個實例都是獨立存在的。

Range聲明范圍的三種形式

from win32com.client import Dispatch
client = Dispatch('word.Application')
client.Visible = 1
# 創(chuàng)建一個文檔 返回一個Document對象 操作文檔就必須要操作Document
doc = client.Documents.Add()

此時,客戶端上已經(jīng)創(chuàng)建了一個新文檔,為了方便演示,先在文檔中粘貼一段新聞:

使用Range聲明文檔全選

rng1 = doc.Range()

沒什么可講的,真的太簡單了,如果你剛接觸Python不久且無其他編程語言基礎(chǔ),只需要記住,Range接口返回一個Range對象,表示當前被選中的內(nèi)容,僅此。

使用Range聲明選擇某范圍資源

用法 Range(Start: int, End: int) -> Range

StartEnd表示字符,表示選擇了從Start開始,截至End的范圍。

rng2 = doc.Range(0,10)

使用Range聲明一個無內(nèi)容的范圍:插入點

rng3 = doc.Range(20,20)

當起始位置和結(jié)束位置一樣時,Range中就無內(nèi)容了,它是一個點,這種插入點通常用來往插入點寫入內(nèi)容。這樣做很方便,不必擔心因為誤操作而導致范圍中的內(nèi)容被替換。

Range.Text屬性

Text屬性內(nèi)部有__setter__,可以使用該屬性來獲取或設(shè)置范圍中的內(nèi)容。打印Range實例時,會返回一個<COMObject Range>,看不到實例細節(jié),此時可以使用Text屬性查看范圍中的文本。

使用Text屬性獲取范圍中的內(nèi)容

rng2 = doc.Range(0,4)
print(rng2.Text)
>>>
'總部大樓'

Range.Start & Range.End 屬性

兩個屬性分別可以獲取或設(shè)置范圍的起始位置和結(jié)束位置,在實操中,有時候Range的范圍并不是通過Range(Start, End)這種方式來聲明的,而是某種方式,比如使用Document.Paragraphs(1)獲得文章第一段,而某些操作只能在Range對象下才能操作,那么可以使用,Document.Paragraphs(1).Range將第一段的段落對象轉(zhuǎn)換成了Range對象,此時就可以通過Range.End來獲得范圍的結(jié)束位置啦。

當然,這兩個屬性也是實現(xiàn)了__setter__方法的,意味著可以通過為屬性賦值來改變Range的范圍。

更改Range的范圍

在word編程中,更改Range范圍是常規(guī)操作,上面的StartEnd屬性可以實現(xiàn),但復雜的需求和編程環(huán)境是不允許我們來數(shù)數(shù)有幾個字符的,這不現(xiàn)實。所以,微軟官方提供了非常豐富的接口來實現(xiàn)Range范圍的更改,比如,下面要講的MoveStartMoveEnd方法。

MoveStart & MoveEnd方法

1、MoveStart(Unit=1, Count=1)

該方法可以改變范圍的起始位置,可以擴大范圍也可以減少范圍,參數(shù)說明:

  • Unit: 按什么單位移動,1表示字符,3表示句子,4表示段落,
  • Count: 執(zhí)行一次要移動多少個Unit,正數(shù)表示往前移動(文檔結(jié)束的方向),負數(shù)表示往后移動(文檔開頭的方向)

2、MoveEnd(Unit=1, Count=1)

參數(shù)和MoveStart一模一樣。

演示

rng3 = doc.Range(0,4)
rng3.MoveStart(Unit=4, Count=1)
print(rng3.Start, rng2.End)
# 移動后打印起始位置和結(jié)束位置
>>>
(262, 262)

明明只移動了起始位置,但為何結(jié)束位置從原來的4也變成了262字符位置了呢?請看下方說明:

說明 無論是MoveStart還是MoveEnd,如果一方的位置超越了另一方,兩個點就會重疊并形成插入點,最后一起移動到目標位置,不可能會出現(xiàn)結(jié)束位置小于起始位置這種匪夷所思的情況。

這種玩法就很妙,意味著,我們不需要在意到底要數(shù)到第幾個字符就可以輕松獲得一個Range的范圍。

使用Range寫入文本

Range.Text重新賦值實現(xiàn)插入

前面所示,可以使用Range.Text屬性重新賦值,這很簡單,就演示個偽代碼吧。

# 偽代碼
# 在0,0的位置聲明一個插入點
rng1 = doc.Range(0,0)
# 使用Text屬性插入內(nèi)容
rng1.Text = '一燈編程'

注意: 除非你想替換范圍中的內(nèi)容,否則不要輕易使用有內(nèi)容的范圍來執(zhí)行doc.Range(0,10).Text = '插入的內(nèi)容'語句。

InsertBefore和InsertAfter方法插入

InsertBefore:在范圍的起始位置插入內(nèi)容

InsertAfter:在范圍的結(jié)束位置插入內(nèi)容

這兩個方法是為有內(nèi)容的范圍量身訂造的,我想,千言萬語不如一張圖來得直接(懶)。

注意:兩個方法會擴大原來的范圍

插入段落標記

另起一段是word編輯中常用的功能,使用回車即可實現(xiàn),在word編程中,有三個方法可以實現(xiàn)的。

InertParagraph

使用段落標記\r替換原來范圍中的內(nèi)容,并形成新段落。

rng4 = doc.Range(20,20)
rng4.InsertParagraph()

該方法適用于插入點,因為它會使用自動執(zhí)行以下代碼:

rng4.Text = '\r'

意味著,\r會替換原來范圍中的內(nèi)容,除非有這個必要。執(zhí)行這個方法后,從字符21開始,后面的內(nèi)容都會另起一段。

InsertParagraphBefore

在范圍起始位置插入一個段落標記\r,意思是在原來內(nèi)容的基礎(chǔ)上,在起始位置插入一個\r,那么當前范圍會形成一個新段落,假如原來的內(nèi)容為一燈編程,執(zhí)行該方法后,內(nèi)容為\r一燈編程。

rng5 = doc.Range(4,8)
rng5.InsertParagraphBefore()
print(rng5.Text)
>>>
"\r一燈編程"

InsertParagraphAfter

和InsertParagraphBefore相反,它會在結(jié)束位置插入\r,作用完全一樣,不作演示。

最后

Document需要講的內(nèi)容很多,僅Range接口就能講很多集。學習不能急,但也不能懶,代碼敲起來,沒有學不會的內(nèi)容。

以上就是學習win32com操作word之Range精講的詳細內(nèi)容,更多關(guān)于Range win32com操作word的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python使用pyodbc訪問數(shù)據(jù)庫操作方法詳解

    Python使用pyodbc訪問數(shù)據(jù)庫操作方法詳解

    這篇文章主要介紹了Python使用pyodbc訪問數(shù)據(jù)庫操作方法,結(jié)合實例形式詳細分析了Python基于pyodbc針對數(shù)據(jù)庫的連接、查詢、插入、修改、刪除等操作技巧與注意事項,需要的朋友可以參考下
    2018-07-07
  • 淺談Django2.0 加xadmin踩的坑

    淺談Django2.0 加xadmin踩的坑

    今天小編就為大家分享一篇淺談Django2.0 加xadmin踩的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 詳解python?Warning警告有哪些情況

    詳解python?Warning警告有哪些情況

    這篇文章主要為大家介紹分析了python?Warning警告有哪些情況示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Python圖片檢索之以圖搜圖

    Python圖片檢索之以圖搜圖

    由于很多論文里面的測試圖片沒有標號,就不能確定它們是Testset數(shù)據(jù)集中哪幾張圖片.為了能解決這個問題,需要完成以圖片去搜索整個數(shù)據(jù)集文件目錄的任務.本文有非常詳細的圖文示例,需要的朋友可以參考下
    2021-05-05
  • Python字符串格式化str.format()方法的實現(xiàn)

    Python字符串格式化str.format()方法的實現(xiàn)

    字符串的格式化是一個非常重要的功能,用于創(chuàng)建包含變量值的字符串,本來就來介紹一下Python字符串格式化str.format()方法的實現(xiàn),感興趣的可以了解一下
    2023-11-11
  • python怎么判斷模塊安裝完成

    python怎么判斷模塊安裝完成

    在本篇內(nèi)容里小編給大家分享的是關(guān)于python如何判斷模塊是否安裝的技術(shù)文章,有興趣的朋友們可以參考下。
    2020-06-06
  • python第三方異步日志庫loguru簡介

    python第三方異步日志庫loguru簡介

    在編寫調(diào)試Python代碼過程中,我們經(jīng)常需要記錄日志,通常我們會采用python自帶的內(nèi)置標準庫logging,但是使用該庫,配置較為繁瑣。為了提升編程效率,本文重點介紹最近發(fā)現(xiàn)的一個寶藏第三方日志庫Loguru,感興趣的朋友一起看看吧
    2022-12-12
  • Python實現(xiàn)http接口自動化測試的示例代碼

    Python實現(xiàn)http接口自動化測試的示例代碼

    這篇文章主要介紹了Python實現(xiàn)http接口自動化測試的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • python交互式圖形編程實例(一)

    python交互式圖形編程實例(一)

    這篇文章主要為大家詳細介紹了python交互式圖形編程實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Python接口自動化系列之unittest結(jié)合ddt的使用教程詳解

    Python接口自動化系列之unittest結(jié)合ddt的使用教程詳解

    這篇文章主要介紹了Python接口自動化系列之unittest結(jié)合ddt的使用教程詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02

最新評論