財務大數(shù)據(jù)分析 課件 6.Wd操作自動化_第1頁
財務大數(shù)據(jù)分析 課件 6.Wd操作自動化_第2頁
財務大數(shù)據(jù)分析 課件 6.Wd操作自動化_第3頁
財務大數(shù)據(jù)分析 課件 6.Wd操作自動化_第4頁
財務大數(shù)據(jù)分析 課件 6.Wd操作自動化_第5頁
已閱讀5頁,還剩112頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第6章Word操作自動化——自動生成財務分析Word報告本章將講解利用Python操作Word的一些基礎知識點,包括Word內(nèi)容的讀寫、格式的設計、段落的設計、圖表及圖片的設計等內(nèi)容,主要是為之后的更多的案例實戰(zhàn)做鋪墊,需要讀者打好基礎。在完成基礎內(nèi)容后,本章結(jié)合兩個實戰(zhàn)案例,對于利用Python操作Word的各種基本方法進行綜合運用,讓讀者體會如何將理論知識與日常實際需求相結(jié)合?!蹦夸汸ython+Word基礎Python+Word進階Python+Word補充知識點Python操作Word案例實戰(zhàn)——批量生成請柬Python操作Word案例實戰(zhàn)——自動生成上市公司研究報告6.1Python+Word基礎這一節(jié)首先講解利用Python創(chuàng)建Word的相關庫的知識,包括python-docx庫的安裝以及python-docx庫的基礎知識,為之后的學習進階知識以及實戰(zhàn)做準備。6.1.1python-docx庫的安裝要想讓Python能夠操控Word,首先要安裝python-docx庫。這里推薦采用pip安裝法,通過Win+R快捷鍵調(diào)出運行框,輸入cmd后單擊“確定”按鈕,如圖6-1所示,在彈出的窗口中輸入pipinstallpython-docx后按Enter鍵即可安裝。圖6-1其實python-docx庫有一個官方說明文檔,為全英文文檔(如果需要可以在谷歌瀏覽器窗口中右擊,在彈出的快捷菜單中執(zhí)行“翻譯中文(簡體)”命令將英文翻譯成中文)。官方說明文檔內(nèi)容很全面,缺點就是內(nèi)容很多,有的時候所需要的知識點不太容易找到,以及目前沒有中文官方說明文檔,所以很多和中文相關的內(nèi)容比較難以處理,比如說設置中文字體就需要一些小技巧,本章便主要講解一些常用知識點以及對于中文的處理技巧。6.1.2python-docx庫的初步介紹安裝完python-docx庫之后,用如下代碼來熟悉其使用效果,其中的文本內(nèi)容取自武漢大學的三行情書比賽獲獎作品,注意其中的保存文件夾要提前創(chuàng)建。6.1.2python-docx庫的初步介紹首先通過importdocx命令導入python-docx庫;其次利用file=docx.Document()在后臺創(chuàng)建一個Word文檔,并賦值給file;下面通過file.add_paragraph()方法來添加段落,其中paragraph的中文意思就是段落;最后通過file.save()方法進行文件命名及保存,這里使用的是相對路徑,即Word文檔會被保存在代碼所在文件夾。如果使用絕對路徑,則需提前創(chuàng)建好相關文件夾(關于相對路徑和絕對路徑的相關知識點可以參考3.2.2小節(jié)補充知識點)。如圖6-2所示,此時設置的文件夾里已經(jīng)自動生成了一個Word文檔,里面的內(nèi)容即三行情書內(nèi)容,此時的字體還有待完善,關于字體的設置將在6.2節(jié)進行講解。圖6-2初步了解python-docx庫的基本內(nèi)容后,下面所需要做的就是豐富這個Word文檔中的內(nèi)容,比如添加標題,設置字體,添加表格、圖片,設置表格及段落格式等。6.1.3python-docx庫的基礎知識這里首先來講解python-docx庫的一些基礎知識,為之后的進階內(nèi)容打好基礎。(1)創(chuàng)建及保存Word文檔通過docx.Document()方法就能創(chuàng)建一個Word文檔。通過上面兩行代碼就可以在計算機后臺輕松創(chuàng)建一個Word文檔。采用這樣的方法可以創(chuàng)建一個新的Word文檔,如果想打開已經(jīng)存在的Word文檔,只要在方法的括號里寫入Word文檔路徑即可,代碼如下:這樣就可以打開已有的Word文檔,并在其中進行操作。這個操作有的時候很有用,比如有的時候需要為Word文檔添加頁眉頁腳,而目前python-docx庫設置頁眉頁腳比較麻煩(將在Python+Word進階篇講),這時就可以先創(chuàng)建一個Word文檔,把頁眉頁腳設置好然后用docx.Document()方法打開它進行操作。6.1.3python-docx庫的基礎知識通過save()方法可以進行文檔保存及命名。這樣就能在設置的文件夾里看到生成的Word文檔了。其中有一個要注意的點,保存文件的文件夾一定要提前存在,否則會報錯。如果該Word文檔已經(jīng)存在,則會用新的Word文檔把舊的Word文檔替代。還有一個重要的點,如果舊的Word文檔已經(jīng)存在,那么在執(zhí)行程序的時候不要打開它,不然程序無法用新的Word文檔去替代舊的Word文檔。6.1.3python-docx庫的基礎知識(2)添加標題通過add_heading()方法能添加標題。其中l(wèi)evel=0,表示標題級別為0,字體較大。不過不推薦采用該方式添加標題,因為它默認會為標題加下畫線,可以用下面講的添加段落的方式來添加標題。(3)添加段落文字通過add_paragraph()方法可以添加段落。6.1.3python-docx庫的基礎知識6.2節(jié)將講解如何設置段間距、行間距及首行縮進等內(nèi)容。(4)添加圖片通過add_picture()方法能添加圖片。這個圖片的大小是默認的,6.2節(jié)將介紹如何設置圖片樣式。(5)添加分頁符通過add_page_break()方法可以添加分頁符。通過這個方法能實現(xiàn)自動分頁,之后的內(nèi)容將從新的一頁開始。6.1.3python-docx庫的基礎知識其中,cell(a,b)表示表格的單元格,a表示第幾行,b表示第幾列,有個需注意的點,在編程中,序號都是從0開始的,所以cell(0,0)表示的是第1行第1列。默認的表格沒有邊框,6.2節(jié)將講解如何設置表格樣式。(6)添加表格通過add_table()方法可以添加表格。(7)讀取Word文檔我們不僅可以通過Python創(chuàng)建Word文檔,還可以利用Python來讀取Word文檔,其方法和打開Word文檔的類似,代碼如下:其中,第2行代碼的作用就是通過for循環(huán)就可以輸出該Word文檔里的所有段落,注意輸出的時候paragraph.text才是它的文本內(nèi)容,不要簡單地寫成paragraph。6.1.3python-docx庫的基礎知識這里可以通過字符串拼接的方式來匯總內(nèi)容,代碼如下:此外還可以通過創(chuàng)建一個空列表并利用列表名.append(新元素)的方法把它們放置到一個列表里,然后通過'連接符'.join(列表名)的方法把列表轉(zhuǎn)換成字符串,之后便可以根據(jù)相應的需求來進行進一步分析,代碼如下:6.1.3python-docx庫的基礎知識所有代碼的匯總?cè)缦拢⒁獾冖懿糠值膱D片路徑需要自己定義,以及最后圖片保存的文件夾得提前創(chuàng)建好。6.1.3python-docx庫的基礎知識運行結(jié)果如圖6-3所示。圖6-3可以看到其中的中文字體、圖片和表格樣式都有改善空間,6.2節(jié)便來講解如何完善這些細節(jié)。6.2Python+Word進階6.1節(jié)是python-docx庫的基礎知識,學完之后要求讀者能完成Word文檔的基本操作,不過界面還不是特別美觀,比如字體、段落、表格、圖片等都還有待完善。這一節(jié)其實就是講解在實戰(zhàn)中經(jīng)常用到的一些知識點,作為對6.1節(jié)的補充與完善。6.2.1設置中文字體設置中文字體是利用Python操控Word文檔的一個重點也是一個難點,代碼如下:具體使用方法是:把這幾行代碼直接寫在程序的最上面。代碼如下:如果想換成其他中文字體,只要把上面代碼中的“微軟雅黑”改成別的字體名稱即可。6.2.2在段落中新增文字有時需要在原有段落中新增文字,這時需要對之前添加段落的代碼進行修改,代碼如下:這和單獨寫file.add_paragraph('我喜歡你')的結(jié)果是一樣的,不過它的意義不太一樣,之前講過file.add_paragraph('我喜歡你')生成的是一個段落,那么“我喜歡你”4個字雖短,卻也是個段落,如果要在這個段落里再添加內(nèi)容,比如在“你”字后面再加“的眼”,通過add_paragraph()方法只能新建一個段落,就沒有辦法在“你”字后面增加內(nèi)容了。比如執(zhí)行如下代碼:6.2.2在段落中新增文字生成的就是如下結(jié)果。而通過add_run()方法則可以在一個段落后面再新增內(nèi)容,代碼如下:這樣生成的結(jié)果就是一段內(nèi)容,而不是兩個段落內(nèi)容了:補充知識點:paragraph和run的深入理解其實paragraph和run有圖6-4所示的層級關系。其中,圖6-4最左側(cè)的document指Word應用程序,paragraph是段落的意思,run可以簡單理解為段落里的語句,run可以是段落里的一句話,也可以是多句話,通常來說格式相同的語句屬于同一個run,文字的字體、大小、下畫線等信息都包含在run對象中。圖6-46.2.2在段落中新增文字下面通過圖6-5所示文本來舉個例子,圖6-5中有兩個段落,每個段落里都有多個run,以第一個段落為例,其中前兩句話格式明顯不同,因此它們就是兩個不同的run,通常一個run里的文字格式都是一致的(正如前文所說:文字的字體、大小、下畫線等信息都包含在run對象中)。圖6-56.2.2在段落中新增文字下面通過代碼來簡單演示,其中Word文檔名稱為“測試文檔.docx”,Word文檔里的內(nèi)容就是圖6-5所示的兩段話,完整代碼如下:輸出結(jié)果如下,可以看到第一個run的確就是圖6-5中的第一句話。6.2.2在段落中新增文字為了加深理解,可以遍歷上面獲取到的run對象列表,代碼如下:獲取結(jié)果如下,其中一行就是一個run的文本內(nèi)容??梢钥吹竭@個run的劃分是有一定的規(guī)律的,通常格式相同的會被劃分為1個run,不過也不絕對,例如第4行的“二”和第5行的“是觀念的轉(zhuǎn)變”的格式是一樣的,但是Python識別的時候還是認為它們是2個不同的run(可能是因為這個是人手動創(chuàng)建的Word文檔,有底層的格式區(qū)別),這個無須深究,這里舉這個例子主要為了讓大家了解paragraph和run的含義,如果是通過Python創(chuàng)建Word文檔,可以通過run指定段落里不同文字的格式,這些內(nèi)容6.2.3小節(jié)會講解。6.2.2在段落中新增文字此外,paragraph.text()方法也是通過

run對象的方法獲取到文字信息,paragraph.text()方法源代碼如下所示(簡單了解即可)。6.2.3設置字體大小及顏色除了可以在段落后新增內(nèi)容外,通過add_run()還可以設置字體的大小和顏色等屬性。這里把p.add_run('我喜歡你')賦值給一個叫作run的變量,然后利用run.font調(diào)用它的字體屬性,其中font的中文翻譯就是字體,代碼如下:這個run大家可以理解為段落里的文字,只有段落里的文字可以設置字體屬性,單純的段落是沒有辦法設置字體的,所以不能直接寫font=p.font。之后就可以修改字體font的屬性了,比如修改它的大小,代碼如下:6.2.3設置字體大小及顏色首先得從python-docx庫里導入Pt功能,然后利用font.size進行字體大小設置。其中,這個Pt括號里的數(shù)字就表示字體的大小,單位為“磅”,美國人習慣用“磅”作為文字大小的計量單位,而中國人則習慣用字號作為文字大小的計量單位。其對應關系如表6-1所示。表6-16.2.3設置字體大小及顏色也可以設置字體顏色,不過設置字體顏色需要先從python-docx庫中導入字體顏色的功能,代碼如下:其中,這個RGB是顏色的一種表現(xiàn)形式,這里的(54,95,145)表示的就是藍色,如果想查看更多顏色的RGB表現(xiàn)形式,可以去網(wǎng)上搜索“顏色RGB對照表”,便可找到很多RGB顏色對照的網(wǎng)址。除了字體大小和顏色之外,還可以設置字體粗體、斜體與下畫線,代碼如下:6.2.4設置段落樣式:對齊方式、首行縮進、行間距、段間距、段落序號有時需要設置段落的對齊方式、首行縮進、行間距、段間距及段落序號等,這一小節(jié)就來詳細講解如何設置段落樣式。首先來看對齊方式,先設置文本居中對齊。首先需要導入WD_ALIGN_PARAGRAPH功能,導入方式如上面代碼所示,然后就可以利用p.paragraph_format.alignment的功能進行居中對齊的設置了。除了居中對齊外,還可以設置別的對齊方式,對應代碼如表6-2所示。表6-26.2.4設置段落樣式:對齊方式、首行縮進、行間距、段間距、段落序號除了設置對齊方式外,還可以設置首行縮進,代碼如下:首先需要導入Inches功能,然后就可以利用p.paragraph_format.first_line_indent功能進行首行縮進的設置了。第3行代碼中Inches括號里面的數(shù)字的單位是英寸。對于小四號字體,6.2.3小節(jié)提供過一個字號與磅和英寸的對應表格,其中小四號字體對應0.16英寸,而縮進一般是兩個字符長度,所以選擇0.32英寸的首行縮進比較合適,也可以對其進行適當?shù)奈⒄{(diào)。對于別的字號的字體,可以參照小四號字體的首行縮進方式進行設置。6.2.4設置段落樣式:對齊方式、首行縮進、行間距、段間距、段落序號如果需要設置行間距與段間距,可以按照如下代碼進行設置。對于段間距,其設置方式與行間距的類似,代碼如下:6.2.4設置段落樣式:對齊方式、首行縮進、行間距、段間距、段落序號還可以利用Python來設置段落序號,這個用得相對較少,只需要再添加一個style='序號格式',其中ListBullet為點序號,ListNumber為數(shù)字序號,代碼如下:讀者可以把上述代碼依次放到Python中看看效果,然后打開生成的Word文檔,在其中右擊,在彈出的快捷菜單中選擇“段落”進行查看。完整代碼如下:6.2.4設置段落樣式:對齊方式、首行縮進、行間距、段間距、段落序號6.2.4設置段落樣式:對齊方式、首行縮進、行間距、段間距、段落序號6.2.4設置段落樣式:對齊方式、首行縮進、行間距、段間距、段落序號效果如圖6-6所示。圖6-6關于段落樣式的更多內(nèi)容,也可以訪問python-docx官網(wǎng)進行學習。6.2.5設置表格樣式通過表格樣式可以使設置表格邊框的代碼相對而言簡單一些,只需要在創(chuàng)建表格的時候加上style="表格樣式",代碼如下:以上代碼創(chuàng)建了一個兩行三列的表格,其中表格樣式選擇的是LightShadingAccent1,效果如圖6-7所示。圖6-76.2.5設置表格樣式除了LightShadingAccent1這一表格樣式外,還有許多別的表格樣式可供選擇,在python-docx官網(wǎng)可以查看其他表格樣式,下面介紹一些常用的表格樣式。表格樣式1:TableGrid。這個樣式采用很常見的黑白邊框。表格樣式2:LightShading。它每隔一行有一個陰影行。表格樣式3:LightShadingAccent1。這個樣式就是案例使用的藍色表格,可以把這個數(shù)字1換成2、3、4、5、6從而把顏色變成紅、綠、紫、青、橙。6.2.5設置表格樣式表格樣式4:LightList。這個樣式的黑色標題框顯得比較簡潔。若寫成LightListAccent1,則黑色標題框變?yōu)樗{色,同樣可以把這個數(shù)字1換成2、3、4、5、6把顏色變成紅、綠、紫、青、橙。表格樣式5:MediumShading1Accent1。它的標題框是深藍色的,下面的文本框為淡藍色的。同樣可以把第二個數(shù)字1換成2、3、4、5、6從而把顏色變成紅、綠、紫、青、橙。如果把第一個數(shù)字1換成2,那么第一列都是深色背景了。6.2.6設置圖片樣式圖片樣式的設置就相對比較容易了,主要就是設置圖片的寬和高,分別使用width(寬)和height(高)來進行設置,代碼如下:同樣,首先要從python-docx庫里導入Inches(英寸)這個功能,如果之前已經(jīng)導入了則不需要重復導入;然后通過width來設置寬度、height來設置高度,其中1英寸等于2.54厘米,約等于Word文檔中5個四號字的長度。這個時候圖片默認放在最左邊,如果想讓它居中,可以按如下代碼設置。6.2.5設置表格樣式完整代碼如下:將上述代碼匯總運行后,最終效果如圖6-8所示。圖6-86.3Python+Word補充知識點這一節(jié)主要講解Python+Word的一些不太常用,但如果用到又比較重要的3個知識點:自動添加頁眉頁腳、在Word文檔中自動添加超鏈接和自動標紅Word文檔中的關鍵詞。因此本節(jié)內(nèi)容主要用于給需要的讀者翻閱查看。在正式講解之前,首先補充關于節(jié)(section)的相關知識,Word文檔對象中有一個節(jié)的概念,一個Word文檔如果不人為添加節(jié),則默認整個文檔為一節(jié)。在節(jié)范圍內(nèi)可以統(tǒng)一設置格式,如頁眉頁腳等。在Word文檔中人為添加節(jié)的方式如下。假設原始文檔中有兩個頁面,如圖6-9所示。圖6-96.3Python+Word補充知識點這兩個頁面都屬于第一個節(jié),如果想添加第二個節(jié),首先將光標移動到文檔內(nèi)容的最后,執(zhí)行“布局”>“分隔符”>“下一頁”命令,如圖6-10所示圖6-106.3Python+Word補充知識點當我們選擇了以下一頁作為新一個節(jié)的開始,就可以看到文檔生成了新的一頁,這個時候,第一個節(jié)的范圍是第一頁和第二頁,而第二個節(jié)的范圍就是第三頁及以后的頁,如圖6-11所示。圖6-116.3Python+Word補充知識點添加節(jié)是否就只是為了添加一個新的空白頁?如果只是這樣,未免畫蛇添足。多個節(jié)的設置有助于根據(jù)文檔每一部分的內(nèi)容或者需求,設置不同的頁面格式,如頁眉頁腳,具體的演示如下。首先,假設想讓文檔的第一個節(jié)的部分頁眉內(nèi)容為“這里是第一個section”,而讓文檔的第二個節(jié)的部分頁眉內(nèi)容為“這里是第二個section”。下面先按照想法添加第一個節(jié)的頁眉,如圖6-12所示。圖6-126.3Python+Word補充知識點此時發(fā)現(xiàn),第二個節(jié)的頁眉也被修改了,和第一個節(jié)的內(nèi)容完全相同,當我們嘗試對第二個節(jié)的頁眉進行修改時,假設刪掉section這個單詞,發(fā)現(xiàn)第一個節(jié)的頁眉又被修改了,這就有點兒奇怪了,按照前文的講解,兩個節(jié)中的格式不應該是相互獨立的嗎?現(xiàn)在兩個節(jié)的格式內(nèi)容卻同步了,如圖6-13所示,這是怎么回事?圖6-136.3Python+Word補充知識點別急,回到編輯第二個節(jié)的狀態(tài)查看,如圖6-14所示。圖6-146.3Python+Word補充知識點當我們把光標移動到第二個節(jié)的頁眉,會發(fā)現(xiàn)上方的工具欄中有一個“鏈接到前一節(jié)”按鈕,它默認是被選中的,單擊這個按鈕,取消其選中狀態(tài)后,再編輯第二個節(jié)的頁眉,此時能夠正確地單獨編輯第二個節(jié)的頁眉,而不影響前面的節(jié),如圖6-15所示。圖6-15到這里,根據(jù)演示案例可以得出結(jié)論,使用多個節(jié),確實可以實現(xiàn)我們想要的不同的頁面格式設置,頁面的頁眉和頁腳可以填寫不同的信息,但是前提是要關閉后面創(chuàng)建的節(jié)的“鏈接到前一節(jié)”功能,該功能是默認開啟的。6.3.1添加頁眉頁腳如果頁眉頁腳是固定的內(nèi)容,可以不用通過Python生成,可以創(chuàng)建一個Word模板,提前設置好頁眉頁腳。6.3.1添加頁眉頁腳第6行代碼用于設置頁眉長度為4厘米;第7行代碼用于設置頁腳長度為3厘米;第10行代碼用于獲取第一個節(jié)(沒有人為添加,全文檔默認只有一個節(jié))的頁眉;通過節(jié)的header屬性,第12行代碼用于獲取頁眉中的第一個段落;第13行代碼用于向這個段落中添加內(nèi)容“這是第一節(jié)的頁眉”;第14行代碼用于設置頁眉居中對齊。6.3.1添加頁眉頁腳第2行代碼的邏輯與前文獲取頁眉的邏輯一樣,只不過此處通過節(jié)的footer屬性,第3行和第4行代碼用于向頁腳添加內(nèi)容“這是第一節(jié)的頁腳”,第5行代碼用于設置頁腳右對齊,第7行代碼保存文件。6.3.1添加頁眉頁腳這里主要運用了本節(jié)一開始講的多節(jié)的概念。創(chuàng)建頁眉頁腳的代碼與之前的完全相同,這里不贅述,主要講解在Word程序中手動添加多節(jié)以及取消與前一個節(jié)的鏈接的操作,從而實現(xiàn)在一個文檔中設置多種樣式的頁眉頁腳。第15行代碼表示在當前頁面的下一頁創(chuàng)建一個新的節(jié),就相當于在Word文檔中將光標移動到文章的最后,通過執(zhí)行“布局”>“分隔符”>“下一頁”命令實現(xiàn)的操作。第18行代碼通過下標1選擇第二個節(jié)的頁眉。最重要的一步就是第19行代碼,通過is_linked_to_previous屬性,取消與前一個節(jié)的鏈接,否則就會出現(xiàn)示例中兩個節(jié)的內(nèi)容被同步修改的問題。之后的代碼與之前的完全相同。注:start_type中,0表示連續(xù)分節(jié)符,1表示節(jié)的結(jié)尾符號,2表示下一頁分節(jié)符,3表示偶數(shù)頁分節(jié)符,4表示奇數(shù)頁分節(jié)符,分別對應手動添加節(jié)時“布局”菜單“分隔符”下拉列表中的添加新節(jié)的選項。6.3.2在Word文檔中添加超鏈接本小節(jié)將添加超鏈接的代碼整理成一個函數(shù),方便讀者使用,有興趣的讀者可以查看函數(shù)中的具體實現(xiàn)代碼。使用方法:直接復制代碼,然后改最后的幾行代碼即可。代碼結(jié)構(gòu)如下:6.3.2在Word文檔中添加超鏈接6.3.2在Word文檔中添加超鏈接最后幾行代碼中,代碼“p=document.add_paragraph()”添加了一個新的段落;代碼“hyperlink=add_hyperlink(p,'','添加了超鏈接的文字內(nèi)容并且不加顏色',None)”調(diào)用添加超鏈接的函數(shù),參數(shù)分別是新建的段落,鏈接的URL是百度,URL綁定的文字內(nèi)容為“添加了超鏈接的文字內(nèi)容并且不加顏色”,不設置文字顏色;后面幾行代碼是第二個超鏈接的添加方式,區(qū)別就是設置了文字顏色。結(jié)果如圖6-16所示,如果需要設置字體也可以在代碼最前面用本章第2節(jié)講過的知識設置字體。圖6-16

6.3.3自動標紅Word文檔中的關鍵詞有時我們需要將Word文檔中的指定關鍵字或者關鍵詞標紅,原始文檔“測試.docx”的內(nèi)容如圖6-17所示,我們希望將其中的關鍵詞,例如“桂林”“風景”“中國”等詞自動標紅,該如何實現(xiàn)呢?圖6-176.3.3自動標紅Word文檔中的關鍵詞首先嘗試標紅一個關鍵詞“桂林”,完整代碼如下:6.3.3自動標紅Word文檔中的關鍵詞6.3.3自動標紅Word文檔中的關鍵詞第1~3行代碼用于引入相關庫。第5~7行代碼用于讀取Word文檔“測試.docx”,并設置整篇文檔的字體為宋體。第10~45行代碼為核心代碼,其核心原理是遍歷每個段落(forpinfile.paragraphs中的p表示文章中的每一個段落)中的每個run(forrinp.runs中的r表示每個段落中的run內(nèi)容),關于段落和run的相關知識點可以參考6.2.2小節(jié)的補充知識點。其中,第13~17行代碼用于獲取段落中每個run的字體大小、加粗情況、顏色和字體名稱。第20~23行代碼根據(jù)關鍵詞分隔正文內(nèi)容,其實就是檢查每個run中是否含有關鍵詞,然后根據(jù)關鍵詞分隔原始文檔。第25~45行代碼根據(jù)關鍵詞分隔的情況,將關鍵詞標紅(run.font.color.rgb=RGBColor(255,0,0)中的(255,0,0)表示紅色,以及關鍵詞前的內(nèi)容保留原始文字格式,最后的第41~45行代碼把最后一個關鍵詞后的內(nèi)容設置成原來的文字格式。第47行代碼用于保存文件為“結(jié)果.docx”。6.3.3自動標紅Word文檔中的關鍵詞最終結(jié)果如圖6-18所示,可以看到成功將“桂林”2個字標成紅色了。圖6-186.3.3自動標紅Word文檔中的關鍵詞那么如果想要批量標紅多個關鍵詞,例如“桂林”“風景”“中國”,則可以通過設置函數(shù)的方式來進行批量處理,核心代碼如下。主要就是把前文中的“桂林”關鍵詞換成定義的函數(shù)piliang(keyword)中的keyword參數(shù),此外在下面代碼中還新增了一行ifkeywordinp.text:代碼,其中p.text表示段落的文本內(nèi)容,因此這行代碼就是先判斷這個段落里是否有關鍵詞,如果有才執(zhí)行下面的尋找關鍵詞及標紅的操作,如果沒有則不浪費時間,這樣對于長文本會有較好的效果。6.3.2在Word文檔中添加超鏈接了解了核心代碼的基本原理后,完整代碼如下:6.3.2在Word文檔中添加超鏈接6.3.2在Word文檔中添加超鏈接結(jié)果如圖6-19所示,成功批量對多個關鍵詞進行了標紅處理。圖6-19至此,Python操作Word基礎的相關內(nèi)容就講解完畢了,之后我們會通過多個案例實戰(zhàn)來鞏固相關知識點。6.4Python操作Word案例實戰(zhàn)——批量生成請柬在公司日常經(jīng)營中可能需要批量生成公司研究報告,每次都需要向受邀人員發(fā)出請柬,而我們都知道請柬的模板都是固定的,只是在主辦方、與會嘉賓以及受邀人員的姓名等字段上需要進行修改,如果根據(jù)名單手動修改這些內(nèi)容,不僅費時費力,而且可能出現(xiàn)錯誤,這個時候可以借助Python保存所有的嘉賓信息,然后批量生成請柬。圖6-20所示是本例請柬模板,框出的部分就是需要替換的內(nèi)容。圖6-206.4Python操作Word案例實戰(zhàn)——批量生成請柬(1)準備數(shù)據(jù)導入操作Word和設置字體大小的庫。將數(shù)據(jù)保存到數(shù)組中,每個數(shù)組的第i個數(shù)據(jù)就是對應的要填入第i個生成文檔的數(shù)據(jù)字段。第1~3行代碼分別使用數(shù)組保存受邀人員的姓名、舉辦聚會的公司名稱,以及每場聚會都有哪些嘉賓到場。6.4Python操作Word案例實戰(zhàn)——批量生成請柬(2)替換關鍵字一切信息準備好之后就開始進行關鍵字的替換。6.4Python操作Word案例實戰(zhàn)——批量生成請柬第2行代碼用于打開請柬模板文件。第3行代碼用于遍歷請柬模板的每一個自然段。第4~12行代碼用于比較所有自然段中是否有要替換的關鍵字,如果有就用replace()方法將關鍵字標志字段替換成保存的信息,第6、9、12行代碼用于將替換后的字體設置為22號,否則默認的字體過小。第13行代碼生成請柬保存路徑,在代碼所在路徑的“請柬結(jié)果”文件夾中,命名格式為“請柬-受邀人姓名”。程序運行后的效果如圖6-21所示,在對應的“請柬結(jié)果”文件夾中生成了對應名稱的請柬文件。圖6-216.4Python操作Word案例實戰(zhàn)——批量生成請柬打開其中一個文件查看,效果如圖6-22所示。圖6-22對應的字段都被替換為對應的信息。6.4Python操作Word案例實戰(zhàn)——批量生成請柬(3)代碼匯總完整代碼如下所示。6.5Python操作Word案例實戰(zhàn)——自動生成上市公司研究報告學習了6.4節(jié)關于批量替換Word關鍵詞并批量生成文檔的案例后,本節(jié)將在6.4節(jié)的基礎上實現(xiàn)自動生成上市公司的研究報告,該項目也是編者在中國人民大學商學院教授“Python金融”課程布置的一個課程項目。通過Python,我們只需要獲取相應上市公司的基本數(shù)據(jù),即可通過模板Word文檔,將數(shù)據(jù)填入模板的對應位置,從而實現(xiàn)批量生成報告的操作。6.5.1Word生成研究報告的流程生成上市公司研究報告的流程如圖6-23所示,首先需要設置一個通用的模板,之后的工作中只需要將獲取的不同公司的信息都填入模板的相應位置即可。圖6-23然后利用已有信息,編輯正文內(nèi)容,再對頁面、目錄進行設置使其更加美觀,最后根據(jù)內(nèi)容的長短再生成相應的頁碼。6.5.2自動生成模板(1)設置模板本例分兩步實現(xiàn)設置模板的操作,首先借助Python自動生成封面內(nèi)容,之后手動設置文檔域和自動目錄頁,添加分節(jié)符,并空出正文內(nèi)容。注:中間采用手動的原因是目錄頁的生成在Python里比較復雜,而且手動生成的模板之后可以循環(huán)使用,這樣效率是比較高的。實現(xiàn)的預期樣式如圖6-24所示。圖6-246.5.2自動生成模板實現(xiàn)代碼如下。6.5.2自動生成模板第1~4行代碼用于導入相關的庫,包括后面要用到的設置段落對齊、字體字號、顏色等的庫,以及設置中文字體的庫。第6行代碼用于創(chuàng)建一個Word文檔。最后幾行代碼是設置正文字體與中文字體的固定代碼。6.5.2自動生成模板第2行代碼用于獲取第一頁章節(jié)(也就是封面頁)的對象。第4行代碼使用section對象的top_margin屬性設置頁面上邊距為1.27厘米,第5行代碼使用bottom_margin屬性設置頁面底部邊距為1.27厘米,第6行代碼使用left_margin屬性設置左邊距為1.27厘米,第7行代碼使用right_margin屬性設置右邊距為1.27厘米。6.5.2自動生成模板第2行代碼用于添加段落“中國人民大學商學院智能會計”作為標題的第1行。第3行代碼用于設置字體為24磅。第4行代碼用于設置字體為粗體。第5行代碼用于添加標題的第2行“智能研報”。第6~7行代碼用于將新自然段的格式設置為與上一個自然段的格式相同。第9行代碼用于添加一個空白自然段將標題與Logo隔開一定的間隔,使其更美觀。6.5.2自動生成模板第2行代碼通過add_picture()方法向文檔中插入一張圖片,通過width參數(shù)設置圖片的寬度為15.46厘米、圖片的高度為11.59厘米。第4行代碼用于設置圖片的對齊方式為居中對齊。6.5.2自動生成模板第2~3行代碼通過for循環(huán),添加3個空白自然段,將后面的文本內(nèi)容與圖片隔開。第4行代碼用于添加“××公司”內(nèi)容,用于在后面將這里替換成關鍵字。第5行代碼用于將字體大小設置為18磅。6.5.2自動生成模板第3行代碼使用add_table()方法添加一張表格,并通過rows參數(shù)設置行數(shù)為1行,通過cols參數(shù)設置列數(shù)為4列,并通過style參數(shù)設置表格樣式為TableGrid。第5行代碼通過for循環(huán)遍歷每一行表格。第6行代碼通過for循環(huán)遍歷每一行中的每一個單元格。第7行代碼用于修改單元格的寬度為4厘米。第9~12行代碼用于向單元格中輸入內(nèi)容。第13行代碼用于保存模板文件。手動添加域、自動目錄頁、分節(jié)符,效果如圖6-25所示。圖6-25保存模板文件后,還要在需要填寫數(shù)據(jù)的位置使用關鍵字段進行標記,使用的方法就是'#+英文關鍵字段名稱',以便在后期通過查找這些關鍵字標記將實際的數(shù)據(jù)替換到對應的位置。6.5.2自動生成模板(2)代碼匯總完整代碼如下。6.5.2自動生成模板6.5.2自動生成模板6.5.3替換關鍵字(1)保存數(shù)據(jù)假設使用的數(shù)據(jù)都保存在相應的數(shù)組中,保存的格式如圖6-26所示,每個數(shù)組的名稱正好對應了要替換的關鍵字的名稱,而每個數(shù)組的第i個信息就對應了第i個模板中的字段,例如,每個數(shù)組的第一個元素分別是公司名稱(公司1)、報告年份(2020)、酒品種類(酒類)、股票代碼(60001)、等級(AAA),這5個字段構(gòu)成一個模板的信息。圖6-266.5.3替換關鍵字

代碼如下第3~7行代碼用數(shù)組保存每個字段的信息。6.5.3替換關鍵字(2)替換關鍵字替換關鍵字的代碼如下。6.5.3替換關鍵字第1行代碼通過len(company_name)獲取公司的數(shù)量,而這個行數(shù)正好對應了要批量生成的文件數(shù)量。第2行代碼用于打開生成的模板文件。第3行代碼使用for循環(huán)遍歷模板文件中的每一個自然段。第4~13行代碼用于判斷自然段的內(nèi)容中是否有關鍵字,如果有,進行相應的文字替換。第15行代碼用于遍歷文件中的每一張表格。第16~17行代碼用于遍歷表格的每一行中的每一個單元格。第18~27行代碼與替換自然段中關鍵字的邏輯一樣,對單元格中的關鍵字進行替換。第28~29行代碼用于生成文件保存路徑并保存文件,如圖6-27所示。圖6-276.5.3替換關鍵字打開其中的test1.docx文件,檢查相應的關鍵字段是否都被替換,以及相應的數(shù)據(jù)是否正確,效果如圖6-28所示。圖6-286.5.3替換關鍵字(3)代碼匯總完整代碼如下。6.5.3替換關鍵字6.5.4編輯正文并插入圖片(1)編輯正文6.5.4編輯正文并插入圖片這部分代碼主要用于相關庫的導入以及導入6.5.3小節(jié)生成的填寫好數(shù)據(jù)的模板封面文件,以批量生成的test0.docx為例進行操作,并設置中文字體格式。6.5.4編輯正文并插入圖片第2行代碼通過add_heading()方法添加一個標題行,內(nèi)容為“2.行業(yè):總量平穩(wěn)上升、格局分化,結(jié)構(gòu)性紅利待釋放”,并通過level參數(shù)設置該標題行為一級標題。第4行代碼以同樣的方式添加一個二級標題行。第5~7行代碼用于保存要填入正文的內(nèi)容。末行代碼用于將正文內(nèi)容添加到新的自然段中。6.5.4編輯正文并插入圖片這3部分代碼區(qū)塊用于分別設置文檔中一、二、三級標題的顏色和字體樣式,此例只詳細講解第一個代碼區(qū)塊中的代碼,后面兩個代碼區(qū)塊的邏輯與之完全相同。第2行代碼通過for循環(huán)遍歷所有的自然段。第3行代碼用于判斷自然段是否屬于一級標題,如果是,通過第5行代碼修改一級標題顏色,通過第6行和第7行代碼設置字體為微軟雅黑。插入正文內(nèi)容后的效果如圖6-29所示。圖6-29

6.5.4編輯正文并插入圖片(2)插入圖片編輯完正文內(nèi)容以后,在正文之后插入相關的圖片。實現(xiàn)的一種插入圖片的效果如圖6-30所示。圖6-30

6.5.4編輯正文并插入圖片實現(xiàn)該效果的步驟如下。①插入表格定位,設置樣式參數(shù)。②讓表格居中。③調(diào)節(jié)列寬。④將介紹文本插入單元格。⑤將圖片插入單元格。⑥將資料來源插入單元格。注:導入圖片時,先把圖片存儲在本地再導入。具體的代碼如下。第2行代碼用于在文檔中創(chuàng)建一個新的自然段。第4行代碼用于插入一張新的表格,表格為3行1列,設置樣式為LightShadingAccent1。第6行代碼用于設置表格居中。6.5.4編輯正文并插入圖片第2行代碼通過循環(huán)遍歷每一列單元格。第3行代碼用于循環(huán)遍歷每一列中的每一個單元格。第4行代碼用于將單元格寬度設置為17.6厘米。這部分代碼用于在表格的第1行插入圖片的介紹內(nèi)容。第2行代碼用于獲取第1行單元格中的自然段對象。第3行代碼用于將自然段的內(nèi)容修改為傳入的介紹內(nèi)容。第4~6行代碼用于修改介紹內(nèi)容的格式。6.5.4編輯正文并插入圖片這部分代碼用于在表格第3行單元格中插入圖片的資料來源相關內(nèi)容,邏輯與上一段代碼相同,這里不贅述

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論