添加表格很簡單,只需要調用一下add_table()即可,返回一個Table對象,參數可以指定行、列、樣式
from docx import Document
doc = Document()
# 添加一個5行3列的表格,樣式是網格實線
table = doc.add_table(5, 3, )
doc.save('./test.docx')
from docx import Document
from docx.shared import Cm, RGBColor, Pt
...
table.add_row() # 在最下面添加一行
table.add_column(Pt(25)) # 在最右邊添加一列並指定寬度為25磅
...
table.cell(1, 2).text = "冰冷的希望"
table.style.font.size = Pt(15) # 字體大小15磅
table.style.font.color.rgb = RGBColor.from_string("6495ED") # 字體顏色
table.style.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 左對齊
首先是一個表格(Table),表格裡有行(Row)和列(Column),行或列裡有單元格(Cell)
python-docx中用_Row和_Column分別代表行和列,,用_Rows和_Columns表示多行多列,可以使用Table對象的rows和columns屬性獲取所有行列,如果想要訪問行列裡的單元格,可以進一步遍歷
from docx import Document
doc = Document()
table = doc.add_table(5, 3, )
print(table.rows) # 獲取所有行
print(table.columns) # 獲取所有列
# 按行遍歷單元格
for row in table.rows:
for cell in row.cells:
print(cell)
# 按列遍歷單元格
for col in table.columns:
for cell in col.cells:
print(cell)
_Rows和_Columns對象裡有一個table屬性可以返回所屬的表格對象
doc = Document()
table = doc.add_table(5, 3, )
for row in table.rows:
print(row.table)
for col in table.columns:
print(col.table)
通過上面的遍歷可以發現其實_Rows和_Columns就是分別包含Row和Column的可迭代對象,可以通過遍歷分別取出Row和Column對象,而Row和Column對象也很簡單,兩者的屬性一樣的,如下
for row in table.rows:
print(row.cells) # 所有單元格
print(row.height) # 高度
# 第2行高度改為30磅
if row._index == 2:
row.height = Pt(30)
print(row.height_rule) # 指定高度的規則
print(row.table) # 當前表格對象
print(row._index) # 下標
python-docx中用Cell代表單元格,獲取單元格對象的方式除了上面的嵌套循環,還可以通過下標獲取
doc = Document()
table = doc.add_table(5, 3, )
# 獲取第1行第3列的單元格(下標從0開始)
cell1 = table.cell(0, 2)
如果想要修改單元格的文本,可以直接修改Cell對象的text屬性,其實它也是獲取單元格的段落然後修改,所以有兩種方式
from docx import Document
doc = Document()
table = doc.add_table(5, 3, )
# 獲取第1行第3列的單元格(下標從0開始)
cell1 = table.cell(0, 2)
cell1.text = "冰冷的希望"
cell2 = table.cell(1, 2)
paragraph= cell2.paragraphs[0]
run = paragraph.add_run("冰冰很帥")
...
cell3 = table.cell(2, 1)
cell4 = table.cell(3, 2)
cell3.merge(cell4)
可以設置整個表格的樣式,也可以單獨設置單元格的樣式,優先顯示單元格樣式
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Cm, RGBColor, Pt
...
cell2 = table.cell(1, 2)
paragraph = cell2.paragraphs[0]
run = paragraph.add_run("冰冰很帥")
# 設置單元格樣式
run.font.color.rgb = RGBColor.from_string("00FFFF") # 字體顏色
run.font.size = Cm(1) # 字體大小,1厘米
paragraph.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中對齊
# 設置表格樣式,但單元格樣式優先顯示
table.style.font.size = Pt(15) # 字體大小15磅
table.style.font.color.rgb = RGBColor.from_string("6495ED") # 字體顏色
table.style.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 左對齊
...
# 以同一行或同一列的最大值為准
table.cell(0, 0).width = Cm(3)
table.rows[0].height = Cm(2)