python_docx制作word文檔


一、docx模塊

Python可以利用python-docx模塊處理word文檔,處理方式是面向對象的。也就是說python-docx模塊會把word文檔,文檔中的段落、文本、字體等都看做對象,對對象進行處理就是對word文檔的內容處理。

二、相關概念

如果需要讀取word文檔中的文字(一般來說,程序也只需要認識word文檔中的文字信息),需要先了解python-docx模塊的幾個概念。

1. Document對象,表示一個word文檔。
2. Paragraph對象,表示word文檔中的一個段落
3. Paragraph對象的text屬性,表示段落中的文本內容。

 

三、模塊的安裝和導入

安裝模塊

pip3 install python-docx

 

注意在導入模塊時,用的是import docx。

也真是奇了怪了,怎么安裝和導入模塊時,很多都不用一個名字。

 

四、讀取word文本

在了解了上面的信息之后,就很簡單了,下面先創建一個D:\temp\word.docx文件,並在其中輸入如下內容。

 

 寫一段python代碼讀取

#!/usr/bin/env python
# coding: utf-8

import docx
#獲取文檔對象
file=docx.Document("test1.docx")
print("段落數:"+str(len(file.paragraphs)))#段落數為6,每個回車隔離一段

#輸出每一段的內容
for para in file.paragraphs:
 print(para.text)

#輸出段落編號及段落內容
for i in range(len(file.paragraphs)):
 print(""+str(i)+"段的內容是:"+file.paragraphs[i].text)

 

執行輸出:

段落數:6
清平調·其一
【朝代】唐

雲想衣裳花想容,春風拂檻露華濃。
若非群玉山頭見,會向瑤台月下逢。

第0段的內容是:清平調·其一
第1段的內容是:【朝代】唐
第2段的內容是:
第3段的內容是:雲想衣裳花想容,春風拂檻露華濃。
第4段的內容是:若非群玉山頭見,會向瑤台月下逢。
第5段的內容是:
View Code

 

本文參考鏈接:

https://www.jb51.net/article/133405.htm

 

五、制作word文檔

1. 創建文檔

from docx import Document
document = Document()
document.save('ceshi.docx')  #保存文檔

 

執行之后,它會創建一個ceshi.docx,打開之后,內容是空的。

 

2. 添加標題

document.add_heading('琅琊榜', 0)

 

完整代碼如下:

from docx import Document
document = Document()

document.add_heading('琅琊榜', 0)  # 添加標題

document.save('ceshi.docx')  #保存文檔
View Code

 

執行程序,打開文檔,效果如下

 

但是,這個有個問題是標題下面有一條橫線,對於重度強迫症的我是無法容忍的。所以我直接添加段落文字表示標題

 

3. 添加段落文字

document.add_paragraph('劇情簡介')

 

完整代碼如下:

from docx import Document
document = Document()

document.add_paragraph('劇情簡介')  # 添加段落

document.save('ceshi.docx')  #保存文檔
View Code

 

執行程序,打開文檔,效果如下

 

 但是,這只實現了默認格式的段落文字添加,且這里的文字只能是英文。如果要設置中文字體,且對文字設置對齊,顏色,大小等設置,則:

需要使用add_run()方法添加文字。

 

4. 設置文字大小

字體是不是太小了,可以設置文字大小。

關於word中的字體大小對應表,請參考鏈接:

https://blog.csdn.net/zhushouchen/article/details/50236817

 

現在需要設置字體大小為一號,那么對應的數字為26

完整代碼如下:

from docx import Document
from docx.shared import Pt

document = Document()
p = document.add_paragraph()
run = p.add_run('琅琊榜')  # 使用add_run添加文字
run.font.size = Pt(26) #字體大小設置,和word里面的字號相對應,小一

document.save('ceshi.docx')  #保存文檔
View Code

 

執行程序,打開文檔,效果如下

 

可以發現,它的大小就是一號!

 

5. 設置對齊

我需要將這些文件居中對齊,怎么辦?需要導入一個類WD_ALIGN_PARAGRAPH

完整代碼如下:

from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH

document = Document()
p = document.add_paragraph()
run = p.add_run('琅琊榜')  # 使用add_run添加文字
run.font.size = Pt(26) #字體大小設置,和word里面的字號相對應,小一
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中設置

document.save('ceshi.docx')  #保存文檔
View Code

 

注意:這段代碼,導入類方法WD_ALIGN_PARAGRAPH時,Pycharm會飄紅,但是不要緊,執行不會報錯!

執行程序,打開文檔,效果如下:

 

左對齊,WD_ALIGN_PARAGRAPH.LEFT

右對齊,WD_ALIGN_PARAGRAPH.RIGHT

其他更多方式,請參考鏈接:

https://python-docx.readthedocs.org/en/latest/api/enum/WdAlignParagraph.html#wdparagraphalignment

 

6. 設置字體加粗

設置run.bold = True 就可以實現加粗

完整代碼如下:

from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH

document = Document()
p = document.add_paragraph()
run = p.add_run('琅琊榜')  # 使用add_run添加文字
run.font.size = Pt(26) #字體大小設置,和word里面的字號相對應,小一
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中設置
run.bold = True  # 字體加粗

document.save('ceshi.docx')  #保存文檔
View Code

 

執行程序,打開文檔,效果如下:

7. 設置字體

我需要將文字設置為 "宋體",使用

document.styles['Normal'].font.name = '宋體'  # 設置字體
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋體')

網上很多文章說,只需要上面一行就可以了。其實根本就沒有效果,要2行代碼一起設置才會有效果!

 

完整代碼如下:

from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn

document = Document()
p = document.add_paragraph()
run = p.add_run('琅琊榜')  # 使用add_run添加文字
run.font.size = Pt(26) #字體大小設置,和word里面的字號相對應,小一
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中設置
run.bold = True  # 字體加粗
document.styles['Normal'].font.name = '宋體'  # 設置字體
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋體')

document.save('ceshi.docx')  #保存文檔
View Code

 

執行程序,打開文檔,效果如下:

可以發現,它已經是宋體了!之前的字體是MS Mincho

 

8. 設置文字顏色

我需要將標題設置為紅色,需要使用RGB顏色,關於RGB顏色對照表,請參考鏈接:

http://tool.oschina.net/commons?type=3

 

那么紅色對應的RGB就是255.0.0,代碼就是

run.font.color.rgb = RGBColor(255,0,0)

 

完整代碼如下:

from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.shared import RGBColor

document = Document()
p = document.add_paragraph()
run = p.add_run('琅琊榜')  # 使用add_run添加文字
run.font.size = Pt(26) #字體大小設置,和word里面的字號相對應,小一
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中設置
run.bold = True  # 字體加粗
document.styles['Normal'].font.name = '宋體'  # 設置字體
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋體')
run.font.color.rgb = RGBColor(255,0,0) #顏色設置,這里是用RGB顏色

document.save('ceshi.docx')  #保存文檔
View Code

 

執行程序,打開文檔,效果如下:

 

 

9. 添加圖片

先從網絡上下載一張圖片lyb.jpb,請確保圖片和python程序在同一目錄

圖像大小

默認情況下,添加圖像出現在本地的大小。這通常比你想要的更大。本機大小的計算方法。因此,具有300dpi分辨率的300×300像素圖像出現在一平方英寸。問題是大多數圖像不包含dpi屬性,它默認為72 dpi。這將使同一圖像在一邊,在一半左右的某處出現4.167英寸。pixels dpi

要獲得所需的圖像大小,您可以以方便的單位指定其寬度或高度,如英寸或厘米:

from docx.shared import Inches
document.add_picture('image-filename.png', width=Inches(1.0))

你可以自由地指定寬度和高度,但通常你不想要。如果僅指定一個,python-docx用它來計算出其他的適當換算值。這樣的高寬比是保留的,你的圖像看起來不拉伸。

InchesCm提供課程,讓你指定派上用場單位進行測量。在內部,python-docx使用英語公制單位,914400為英寸。所以,如果你忘記了,只是把喜歡的東西width=2,你會得到一個非常小的圖像:)。你需要從導入docx.shared 子包。你可以在算術中使用它們,就像它們是一個整數,事實上它們是。因此,像一個表達式的作品就好了。width Inches(3) /thing_count

 

完整代碼如下:

from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.shared import RGBColor
from docx.shared import Inches

document = Document()
p = document.add_paragraph()
run = p.add_run('琅琊榜')  # 使用add_run添加文字
run.font.size = Pt(26) #字體大小設置,和word里面的字號相對應,小一
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中設置
run.bold = True  # 字體加粗
document.styles['Normal'].font.name = '宋體'  # 設置字體
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋體')
run.font.color.rgb = RGBColor(255,0,0) #顏色設置,這里是用RGB顏色

pic = document.add_picture('lyb.jpg',width = Inches(5))  # 添加圖片

document.save('ceshi.docx')  #保存文檔
View Code

 

執行程序,打開文檔,效果如下:

圖片居中

默認情況下,圖片在文檔中是左對齊的,如果要對圖片進行居中顯示,在網上找了很多方法都不可行,最后找到一種方法是直接加入以下代碼:

last_paragraph = document.paragraphs[-1]
last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER      #圖片居中設置

 

完整代碼如下:

from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.shared import RGBColor
from docx.shared import Inches

document = Document()
p = document.add_paragraph()
run = p.add_run('琅琊榜')  # 使用add_run添加文字
run.font.size = Pt(26) #字體大小設置,和word里面的字號相對應,小一
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中設置
run.bold = True  # 字體加粗
document.styles['Normal'].font.name = '宋體'  # 設置字體
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋體')
run.font.color.rgb = RGBColor(255,0,0) #顏色設置,這里是用RGB顏色

pic = document.add_picture('lyb.jpg',width = Inches(5))  # 添加圖片
last_paragraph = document.paragraphs[-1]
last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER      #圖片居中設置

document.save('ceshi.docx')  #保存文檔
View Code

 

執行程序,打開文檔,效果如下:

 

10. 文字縮進

我需要實現以下效果,就需要用到縮進了

 

關於縮進,有3中方式

from docx.shared import Inches
from docx.shared import Pt

#設置段落從左開始縮進,使用Inches來衡量
paragraph_format.left_indent = Inches(0.5)

#設置段落從右開始縮進,使用Pt來衡量
paragraph_format.right_indent = Pt(20)

#設置段落第一行縮進,可以與上兩個縮進疊加
paragraph_format.first_line_indent = Inches(0.5)

 

仔細觀察,上面的段落只需要用到首行縮進!

完整代碼如下:

#!/usr/bin/env python
# coding: utf-8

from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.shared import RGBColor
from docx.shared import Inches

document = Document()
p = document.add_paragraph()
run = p.add_run('琅琊榜')  # 使用add_run添加文字
run.font.size = Pt(26) #字體大小設置,和word里面的字號相對應,小一
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中設置
run.bold = True  # 字體加粗
document.styles['Normal'].font.name = '宋體'  # 設置字體
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋體')
run.font.color.rgb = RGBColor(255,0,0) #顏色設置,這里是用RGB顏色

pic = document.add_picture('lyb.jpg',width = Inches(5))  # 添加圖片
last_paragraph = document.paragraphs[-1]
last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER      #圖片居中設置

p = document.add_paragraph()
run = p.add_run('劇情簡介')
run.font.size = Pt(22)  # 二號
run.bold = True

p = document.add_paragraph()
run = p.add_run('梅長蘇(胡歌飾)本遠在江湖,卻名動帝輦。江湖傳言:“江左梅郎,麒麟之才,得之可得天下。”作為天下第一大幫“江左盟”的首領,梅長蘇“梅郎”之名響譽江湖。然而,有着江湖至尊地位的梅長蘇,卻是一個病弱青年、弱不禁風,背負着十多年前巨大的冤案與血海深仇,就連身世背后也隱藏着巨大的秘密。')
p_format = p.paragraph_format
p_format.first_line_indent = Inches(0.2)  # 首行縮進

document.save('ceshi.docx')  #保存文檔
View Code

 

執行程序,打開文檔,效果如下:

 

11. 表格

我需要實現下面的表格

 

換行

在劇情簡介和音樂原聲之間,需要有一個換行,否則就太緊湊了,使用

document.add_paragraph(text='\r', style=None)  # 換行

 

表格

表格坐標體系

一張圖,就可以看明白了

 

完整代碼如下:

#!/usr/bin/env python
# coding: utf-8

from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.shared import RGBColor
from docx.shared import Inches

document = Document()
p = document.add_paragraph()
run = p.add_run('琅琊榜')  # 使用add_run添加文字
run.font.size = Pt(26) #字體大小設置,和word里面的字號相對應,小一
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中設置
run.bold = True  # 字體加粗
document.styles['Normal'].font.name = '宋體'  # 設置字體
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋體')
run.font.color.rgb = RGBColor(255,0,0) #顏色設置,這里是用RGB顏色

pic = document.add_picture('lyb.jpg',width = Inches(5))  # 添加圖片
last_paragraph = document.paragraphs[-1]
last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER      #圖片居中設置

p = document.add_paragraph()
run = p.add_run('劇情簡介')
run.font.size = Pt(22)  # 二號
run.bold = True

p = document.add_paragraph()
run = p.add_run('梅長蘇(胡歌飾)本遠在江湖,卻名動帝輦。江湖傳言:“江左梅郎,麒麟之才,得之可得天下。”作為天下第一大幫“江左盟”的首領,梅長蘇“梅郎”之名響譽江湖。然而,有着江湖至尊地位的梅長蘇,卻是一個病弱青年、弱不禁風,背負着十多年前巨大的冤案與血海深仇,就連身世背后也隱藏着巨大的秘密。')
p_format = p.paragraph_format
p_format.first_line_indent = Inches(0.2)  # 首行縮進

document.add_paragraph(text='\r', style=None)  # 換行

p = document.add_paragraph()
run = p.add_run('音樂原聲')
run.font.size = Pt(22)  # 二號
run.bold = True

table = document.add_table(rows=4, cols=5)  # 4行5列的表格
table.cell(0,0).text = "歌曲"
table.cell(0,1).text = "演唱者"
table.cell(0,2).text = "作曲"
table.cell(0,3).text = "作詞"
table.cell(0,4).text = "類型"

table.cell(1,0).text = "《風起時》"
table.cell(1,1).text = "胡歌"
table.cell(1,2).text = "孟可"
table.cell(1,3).text = "海宴"
table.cell(1,4).text = "主題曲、片尾曲"

table.cell(2,0).text = "《紅顏舊》"
table.cell(2,1).text = "劉濤"
table.cell(2,2).text = "趙佳霖"
table.cell(2,3).text = "袁亮"
table.cell(2,4).text = "插曲"

table.cell(3,0).text = "《赤血長殷》"
table.cell(3,1).text = "王凱"
table.cell(3,2).text = "於海航"
table.cell(3,3).text = "清彥、冰封"
table.cell(3,4).text = "插曲"

document.save('ceshi.docx')  #保存文檔
View Code

 

執行程序,打開文檔,效果如下:

 

可以發現,默認的表格是沒有線條的。需要設置表格樣式

表格樣式

關於表格樣式,可以參考鏈接:

https://blog.csdn.net/ibiao/article/details/78595295

 

上面的鏈接,列舉了所有的樣式。注意:這些樣式,都是隔行換色的!

 

喜歡哪個,將樣式名復制一下,使用以下代碼實現!

下面的代碼,表示使用Table Grid樣式

table.style = document.styles['Table Grid']  # 表格樣式

 

完整代碼如下:

#!/usr/bin/env python
# coding: utf-8

from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.shared import RGBColor
from docx.shared import Inches

document = Document()
p = document.add_paragraph()
run = p.add_run('琅琊榜')  # 使用add_run添加文字
run.font.size = Pt(26) #字體大小設置,和word里面的字號相對應,小一
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中設置
run.bold = True  # 字體加粗
document.styles['Normal'].font.name = '宋體'  # 設置字體
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋體')
run.font.color.rgb = RGBColor(255,0,0) #顏色設置,這里是用RGB顏色

pic = document.add_picture('lyb.jpg',width = Inches(5))  # 添加圖片
last_paragraph = document.paragraphs[-1]
last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER      #圖片居中設置

p = document.add_paragraph()
run = p.add_run('劇情簡介')
run.font.size = Pt(22)  # 二號
run.bold = True

p = document.add_paragraph()
run = p.add_run('梅長蘇(胡歌飾)本遠在江湖,卻名動帝輦。江湖傳言:“江左梅郎,麒麟之才,得之可得天下。”作為天下第一大幫“江左盟”的首領,梅長蘇“梅郎”之名響譽江湖。然而,有着江湖至尊地位的梅長蘇,卻是一個病弱青年、弱不禁風,背負着十多年前巨大的冤案與血海深仇,就連身世背后也隱藏着巨大的秘密。')
p_format = p.paragraph_format
p_format.first_line_indent = Inches(0.2)  # 首行縮進

document.add_paragraph(text='\r', style=None)  # 換行

p = document.add_paragraph()
run = p.add_run('音樂原聲')
run.font.size = Pt(22)  # 二號
run.bold = True

table = document.add_table(rows=4, cols=5)  # 4行5列的表格
table.cell(0,0).text = "歌曲"
table.cell(0,1).text = "演唱者"
table.cell(0,2).text = "作曲"
table.cell(0,3).text = "作詞"
table.cell(0,4).text = "類型"

table.cell(1,0).text = "《風起時》"
table.cell(1,1).text = "胡歌"
table.cell(1,2).text = "孟可"
table.cell(1,3).text = "海宴"
table.cell(1,4).text = "主題曲、片尾曲"

table.cell(2,0).text = "《紅顏舊》"
table.cell(2,1).text = "劉濤"
table.cell(2,2).text = "趙佳霖"
table.cell(2,3).text = "袁亮"
table.cell(2,4).text = "插曲"

table.cell(3,0).text = "《赤血長殷》"
table.cell(3,1).text = "王凱"
table.cell(3,2).text = "於海航"
table.cell(3,3).text = "清彥、冰封"
table.cell(3,4).text = "插曲"

table.style = document.styles['Table Grid']  # 表格樣式

document.save('ceshi.docx')  #保存文檔
View Code

 

執行程序,打開文檔,效果如下:

 

表格字體加粗

上面的效果還有一點不足,哪里呢?第一行沒有加粗,關於表格文字加粗,這個問題找了很久,終於找到一篇文章,鏈接如下:

https://www.jb51.net/article/139691.htm

 

在它的基礎上,我做了一些改進。封裝了一個函數th

完整代碼如下:

#!/usr/bin/env python
# coding: utf-8

from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.shared import RGBColor
from docx.shared import Inches

document = Document()
p = document.add_paragraph()
run = p.add_run('琅琊榜')  # 使用add_run添加文字
run.font.size = Pt(26) #字體大小設置,和word里面的字號相對應,小一
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中設置
run.bold = True  # 字體加粗
document.styles['Normal'].font.name = '宋體'  # 設置字體
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋體')
run.font.color.rgb = RGBColor(255,0,0) #顏色設置,這里是用RGB顏色

pic = document.add_picture('lyb.jpg',width = Inches(5))  # 添加圖片
last_paragraph = document.paragraphs[-1]
last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER      #圖片居中設置

p = document.add_paragraph()
run = p.add_run('劇情簡介')
run.font.size = Pt(22)  # 二號
run.bold = True

p = document.add_paragraph()
run = p.add_run('梅長蘇(胡歌飾)本遠在江湖,卻名動帝輦。江湖傳言:“江左梅郎,麒麟之才,得之可得天下。”作為天下第一大幫“江左盟”的首領,梅長蘇“梅郎”之名響譽江湖。然而,有着江湖至尊地位的梅長蘇,卻是一個病弱青年、弱不禁風,背負着十多年前巨大的冤案與血海深仇,就連身世背后也隱藏着巨大的秘密。')
p_format = p.paragraph_format
p_format.first_line_indent = Inches(0.2)  # 首行縮進

document.add_paragraph(text='\r', style=None)  # 換行

p = document.add_paragraph()
run = p.add_run('音樂原聲')
run.font.size = Pt(22)  # 二號
run.bold = True

table = document.add_table(rows=4, cols=5)  # 4行5列的表格
# table.cell(0,0).text = "歌曲"
# table.cell(0,1).text = "演唱者"
# table.cell(0,2).text = "作曲"
# table.cell(0,3).text = "作詞"
# table.cell(0,4).text = "類型"

def th(x,y,content):
    """
    th樣式
    :param x: x坐標
    :param y: y坐標
    :param content: 內容
    :return: None
    """
    # print(grid,content)
    run = table.cell(x,y).paragraphs[0].add_run(content)
    run.bold = True  # 加粗

th(0,0,"歌曲")
th(0,1,"演唱者")
th(0,2,"作曲")
th(0,3,"作詞")
th(0,4,"類型")

table.cell(1,0).text = "《風起時》"
table.cell(1,1).text = "胡歌"
table.cell(1,2).text = "孟可"
table.cell(1,3).text = "海宴"
table.cell(1,4).text = "主題曲、片尾曲"

table.cell(2,0).text = "《紅顏舊》"
table.cell(2,1).text = "劉濤"
table.cell(2,2).text = "趙佳霖"
table.cell(2,3).text = "袁亮"
table.cell(2,4).text = "插曲"

table.cell(3,0).text = "《赤血長殷》"
table.cell(3,1).text = "王凱"
table.cell(3,2).text = "於海航"
table.cell(3,3).text = "清彥、冰封"
table.cell(3,4).text = "插曲"

table.style = document.styles['Table Grid']  # 表格樣式

document.save('ceshi.docx')  #保存文檔
View Code

 

執行程序,打開文檔,效果如下:

 

那么第一行,能不能加一個背景顏色呢?不好意思,目前沒有找到有效的方法。

上面有很多隔行換色的樣式,可以選擇。如果不想要,那么就只能這樣了!

 

表格字體顏色

我需要將表格中的 "胡歌" 變成紅色,怎么辦呢?

加一個方法即可

def td_red(table,x, y,content):
    """
    td紅色字體
    :param table: 表格對象
    :param x: x坐標
    :param y: y坐標
    :param content: 內容
    :return: None
    """
    run = table.cell(x, y).paragraphs[0].add_run(content)
    run.font.size = Pt(11)
    run.font.color.rgb = RGBColor(255, 0, 0)

 

完整代碼如下:

#!/usr/bin/env python
# coding: utf-8

from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.shared import RGBColor
from docx.shared import Inches

document = Document()
p = document.add_paragraph()
run = p.add_run('琅琊榜')  # 使用add_run添加文字
run.font.size = Pt(26) #字體大小設置,和word里面的字號相對應,小一
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER    #段落文字居中設置
run.bold = True  # 字體加粗
document.styles['Normal'].font.name = '宋體'  # 設置字體
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋體')
run.font.color.rgb = RGBColor(255,0,0) #顏色設置,這里是用RGB顏色

pic = document.add_picture('lyb.jpg',width = Inches(5))  # 添加圖片
last_paragraph = document.paragraphs[-1]
last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER      #圖片居中設置

p = document.add_paragraph()
run = p.add_run('劇情簡介')
run.font.size = Pt(22)  # 二號
run.bold = True

p = document.add_paragraph()
run = p.add_run('梅長蘇(胡歌飾)本遠在江湖,卻名動帝輦。江湖傳言:“江左梅郎,麒麟之才,得之可得天下。”作為天下第一大幫“江左盟”的首領,梅長蘇“梅郎”之名響譽江湖。然而,有着江湖至尊地位的梅長蘇,卻是一個病弱青年、弱不禁風,背負着十多年前巨大的冤案與血海深仇,就連身世背后也隱藏着巨大的秘密。')
p_format = p.paragraph_format
p_format.first_line_indent = Inches(0.2)  # 首行縮進

document.add_paragraph(text='\r', style=None)  # 換行

p = document.add_paragraph()
run = p.add_run('音樂原聲')
run.font.size = Pt(22)  # 二號
run.bold = True

table = document.add_table(rows=4, cols=5)  # 4行5列的表格
# table.cell(0,0).text = "歌曲"
# table.cell(0,1).text = "演唱者"
# table.cell(0,2).text = "作曲"
# table.cell(0,3).text = "作詞"
# table.cell(0,4).text = "類型"

def th(x,y,content):
    """
    th樣式
    :param x: x坐標
    :param y: y坐標
    :param content: 內容
    :return: None
    """
    # print(grid,content)
    run = table.cell(x,y).paragraphs[0].add_run(content)
    run.bold = True  # 加粗

def td_red(table,x, y,content):
    """
    td紅色字體
    :param table: 表格對象
    :param x: x坐標
    :param y: y坐標
    :param content: 內容
    :return: None
    """
    run = table.cell(x, y).paragraphs[0].add_run(content)
    run.font.size = Pt(11)
    run.font.color.rgb = RGBColor(255, 0, 0)

th(0,0,"歌曲")
th(0,1,"演唱者")
th(0,2,"作曲")
th(0,3,"作詞")
th(0,4,"類型")

table.cell(1,0).text = "《風起時》"
# table.cell(1,1).text = "胡歌"
td_red(table,1,1,"胡歌")
table.cell(1,2).text = "孟可"
table.cell(1,3).text = "海宴"
table.cell(1,4).text = "主題曲、片尾曲"

table.cell(2,0).text = "《紅顏舊》"
table.cell(2,1).text = "劉濤"
table.cell(2,2).text = "趙佳霖"
table.cell(2,3).text = "袁亮"
table.cell(2,4).text = "插曲"

table.cell(3,0).text = "《赤血長殷》"
table.cell(3,1).text = "王凱"
table.cell(3,2).text = "於海航"
table.cell(3,3).text = "清彥、冰封"
table.cell(3,4).text = "插曲"

table.style = document.styles['Table Grid']  # 表格樣式

document.save('ceshi.docx')  #保存文檔
View Code

 

執行程序,打開文檔,效果如下:

 

 

本文參考鏈接:

https://blog.csdn.net/sinat_30711195/article/details/80725435

 

https://www.cnblogs.com/ontheway703/p/5266041.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM