最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

學(xué)習(xí)win32com操作word之Range精講

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

引言

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

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

Range是什么

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

Range的作用

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

Range聲明范圍的三種形式

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

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

使用Range聲明文檔全選

rng1 = doc.Range()

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

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

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

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

rng2 = doc.Range(0,10)

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

rng3 = doc.Range(20,20)

當(dāng)起始位置和結(jié)束位置一樣時(shí),Range中就無內(nèi)容了,它是一個(gè)點(diǎn),這種插入點(diǎn)通常用來往插入點(diǎn)寫入內(nèi)容。這樣做很方便,不必?fù)?dān)心因?yàn)檎`操作而導(dǎo)致范圍中的內(nèi)容被替換。

Range.Text屬性

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

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

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

Range.Start & Range.End 屬性

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

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

更改Range的范圍

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

MoveStart & MoveEnd方法

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

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

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

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

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

演示

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

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

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

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

使用Range寫入文本

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

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

# 偽代碼
# 在0,0的位置聲明一個(gè)插入點(diǎn)
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)容

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

注意:兩個(gè)方法會(huì)擴(kuò)大原來的范圍

插入段落標(biāo)記

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

InertParagraph

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

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

該方法適用于插入點(diǎn),因?yàn)樗鼤?huì)使用自動(dòng)執(zhí)行以下代碼:

rng4.Text = '\r'

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

InsertParagraphBefore

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

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

InsertParagraphAfter

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

最后

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

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

相關(guān)文章

  • python應(yīng)用Axes3D繪圖(批量梯度下降算法)

    python應(yīng)用Axes3D繪圖(批量梯度下降算法)

    這篇文章主要為大家詳細(xì)介紹了python應(yīng)用Axes3D繪圖,批量梯度下降算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 一文詳解Python中Reduce函數(shù)輕松解決復(fù)雜數(shù)據(jù)聚合

    一文詳解Python中Reduce函數(shù)輕松解決復(fù)雜數(shù)據(jù)聚合

    這篇文章主要為大家介紹了Python中Reduce函數(shù)輕松解決復(fù)雜數(shù)據(jù)聚合示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Python中解決schedule模塊安裝與使用問題的完整指南

    Python中解決schedule模塊安裝與使用問題的完整指南

    在 Python 開發(fā)中,定時(shí)任務(wù)是一個(gè)非常常見的需求,schedule 是一個(gè)輕量級(jí)的 Python 庫,專門用于簡(jiǎn)化定時(shí)任務(wù)的實(shí)現(xiàn),本文將圍繞 schedule 模塊的安裝與使用進(jìn)行詳細(xì)介紹,希望對(duì)大家有所幫助
    2025-03-03
  • Python類與實(shí)例的使用詳解

    Python類與實(shí)例的使用詳解

    面向?qū)ο笞钪匾母拍罹褪穷悾–lass)和實(shí)例(Instance),必須牢記類是抽象的模板,比如Student類,而實(shí)例是根據(jù)類創(chuàng)建出來的一個(gè)個(gè)具體的“對(duì)象”,每個(gè)對(duì)象都擁有相同的方法,但各自的數(shù)據(jù)可能不同
    2022-08-08
  • matplotlib部件之套索Lasso的使用

    matplotlib部件之套索Lasso的使用

    這篇文章主要介紹了matplotlib部件之套索Lasso的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python游戲測(cè)試工具自動(dòng)化遍歷游戲中所有關(guān)卡

    python游戲測(cè)試工具自動(dòng)化遍歷游戲中所有關(guān)卡

    這篇文章主要為大家介紹了python游戲測(cè)試工具自動(dòng)化遍歷游戲中所有關(guān)卡示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Python中的列表生成式與生成器學(xué)習(xí)教程

    Python中的列表生成式與生成器學(xué)習(xí)教程

    這篇文章主要介紹了Python中的列表生成式與生成器學(xué)習(xí)教程,Python中的Generator生成器比列表生成式功能更為強(qiáng)大,需要的朋友可以參考下
    2016-03-03
  • Python讀取表格類型文件代碼實(shí)例

    Python讀取表格類型文件代碼實(shí)例

    這篇文章主要介紹了Python讀取表格類型文件代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • python內(nèi)存管理機(jī)制原理詳解

    python內(nèi)存管理機(jī)制原理詳解

    這篇文章主要介紹了python內(nèi)存管理機(jī)制原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 使用PDB簡(jiǎn)單調(diào)試Python程序簡(jiǎn)明指南

    使用PDB簡(jiǎn)單調(diào)試Python程序簡(jiǎn)明指南

    這篇文章主要介紹了使用PDB簡(jiǎn)單調(diào)試Python程序簡(jiǎn)明指南,本文講解了使用PDB調(diào)試程序的簡(jiǎn)單技巧,方便、簡(jiǎn)潔實(shí)用,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

商洛市| 开封市| 江川县| 彭阳县| 潼南县| 三门县| 昭通市| 嵊泗县| 常德市| 磐安县| 文昌市| 保山市| 会宁县| 白银市| 双江| 十堰市| 盱眙县| 杭州市| 古丈县| 海城市| 陆河县| 千阳县| 兴义市| 皮山县| 昆明市| 桂林市| 沅陵县| 天峻县| 辽源市| 郁南县| 仲巴县| 丹阳市| 平度市| 台江县| 潍坊市| 嵩明县| 西安市| 五华县| 孙吴县| 小金县| 长子县|