獲得文檔的所有表格
表格樣式
#方法一:創(chuàng)建表格時設(shè)置
from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Cm
from docx.shared import RGBColor
doc=Document()
table = doc.add_table(rows=4, cols=3,style ='Table Grid')
#方法二:創(chuàng)建表格后,再設(shè)置
doc=Document()
table = doc.add_table(rows=4, cols=3)
table.style ='Table Grid'
設(shè)置表格列寬 & 行高
'''
設(shè)置列寬
可以設(shè)置每個單元格的寬,同列單元格寬度相同,如果定義了不同的寬度將以最大值準(zhǔn)
'''
table.cell(0,0).width=Cm(10)
#設(shè)置行高
table.rows[0].height=Cm(2)
表格數(shù)據(jù)寫入
#方法一
cell=table.cell(0, 1)
cell.text = 'i-search'
#方法二
cell=table.cell(0,0)
p=cell.paragraphs[0]
run = p.add_run("RPA")
表格文本格式設(shè)置
#單個單元格設(shè)置
run.font.color.rgb = RGBColor(255, 0, 0) # 顏色設(shè)置,這里是用RGB顏色
run.font.size = Pt(15) # 字體大小設(shè)置,和word里面的字號相對應(yīng)
p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #設(shè)置對齊方式
#設(shè)置整個表格字體屬性
table.style.font.size=Pt(18)
table.style.font.color.rgb=RGBColor(255, 0, 0)
table.style.paragraph_format.alignment=WD_PARAGRAPH_ALIGNMENT.CENTER
合并單元格
cell_1=table.cell(1, 0)
cell_2=table.cell(2, 1)
cell_1.merge(cell_2)
添加行列
#添加行
table.add_row()
#有時候,簡單的添加行列,會導(dǎo)致表格設(shè)置的樣式不會延續(xù),此時,需要深度復(fù)制一行或者一列
new_row=deepcopy(table.rows[-1])
table.rows[-1]._tr.addnext(new_row._element)#在最后一行后面添加
table.rows[-1]._tr.addprevious(new_row._element)
添加列
width:列寬
'''
table.add_column(width=Cm(1))

原始表格

通過深度復(fù)制添加的行

通過add_row添加的行
其他表格常用方法
# 表格設(shè)置自動調(diào)整列寬,(默認(rèn)也為真)
table1.autofit = True
# 為表格對象增加列
table1.add_column(shared.Inches(3)) # 需指定寬度
"add_column(self, width):"
# 為表格對象增加行
table1.add_row() # 只能逐行添加
"add_row(self):"
# 獲取行對象
row0 = table1.rows[0]
print(row0)
# 獲取列對象
col0 = table1.columns[0]
# 獲取表格一行的單元格對象列表
row0_cells = table1.row_cells(0)
print(row0_cells)
# 運(yùn)行結(jié)果
# [<docx.table._Cell object at 0x000000000B311C88>,
# <docx.table._Cell object at 0x000000000B311AC8>,
# <docx.table._Cell object at 0x000000000B311B08>,
# <docx.table._Cell object at 0x000000000B311A48>]
# 獲取一列的單元格對象列表
col_0_cells = table1.column_cells(0)
print(col_0_cells)
# 運(yùn)行結(jié)果
# [<docx.table._Cell object at 0x000000000B312F88>,
# <docx.table._Cell object at 0x000000000B312CC8>,
# <docx.table._Cell object at 0x000000000B31A108>]
設(shè)置單元格字體及大小的其他方法
單元格內(nèi)其實(shí)也是有 paragraph 對象的,即對單元格內(nèi)字體設(shè)置方式,和對段落中文字格式設(shè)置方法一樣。
cell_par = cell_new.paragraphs[0] # 獲取到對象
# 設(shè)置對齊方式
from docx.enum.text import WD_ALIGN_PARAGRAPH
cell_par.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 獲取 run 對象
cell_run = cell_new.paragraphs[0].runs[0]
# 設(shè)置字體
cell_run.font.name = 'Times New Roman'
from docx.oxml.ns import qn
cell_run.font.element.rPr.rFonts.set(qn('w:eastAsia'),'楷體')
# 設(shè)置字體顏色
from docx.shared import RGBColor
cell_run.font.color.rgb = RGBColor(255,55,55) # 紅色
復(fù)制表格,并插入在文檔指定段落中插入復(fù)制的表格
from copy import deepcopy #導(dǎo)入copy模塊
from docx import Document
document=Document("report_yang.docx")#讀取已有的文檔
tables = document.tables#獲取文檔中所有的表格
new_table = deepcopy(tables[0])#復(fù)制第一個表格,復(fù)制的表格也可以進(jìn)行單元格的合并添加字段等操作
para1=document.paragraphs[14]#選取第15個段落
para1._p.addnext(new_table._element)#在第十五個段落的后邊插入復(fù)制的表格
document.save('demo.docx')