获得文档的所有表格
表格样式
#方法一:创建表格时设置
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')
#方法二:创建表格后,再设置
doc=Document()
table = doc.add_table(rows=4, cols=3)
table.style ='Table Grid'
设置表格列宽 & 行高
'''
设置列宽
可以设置每个单元格的宽,同列单元格宽度相同,如果定义了不同的宽度将以最大值准
'''
table.cell(0,0).width=Cm(10)
#设置行高
table.rows[0].height=Cm(2)
表格数据写入
#方法一
cell=table.cell(0, 1)
cell.text = 'i-search'
#方法二
cell=table.cell(0,0)
p=cell.paragraphs[0]
run = p.add_run("RPA")
表格文本格式设置
#单个单元格设置
run.font.color.rgb = RGBColor(255, 0, 0) # 颜色设置,这里是用RGB颜色
run.font.size = Pt(15) # 字体大小设置,和word里面的字号相对应
p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #设置对齐方式
#设置整个表格字体属性
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()
#有时候,简单的添加行列,会导致表格设置的样式不会延续,此时,需要深度复制一行或者一列
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))
其他表格常用方法
# 表格设置自动调整列宽,(默认也为真)
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)
# 运行结果
# [<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)
# 运行结果
# [<docx.table._Cell object at 0x000000000B312F88>,
# <docx.table._Cell object at 0x000000000B312CC8>,
# <docx.table._Cell object at 0x000000000B31A108>]
设置单元格字体及大小的其他方法
单元格内其实也是有 paragraph 对象的,即对单元格内字体设置方式,和对段落中文字格式设置方法一样。
cell_par = cell_new.paragraphs[0] # 获取到对象
# 设置对齐方式
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]
# 设置字体
cell_run.font.name = 'Times New Roman'
from docx.oxml.ns import qn
cell_run.font.element.rPr.rFonts.set(qn('w:eastAsia'),'楷体')
# 设置字体颜色
from docx.shared import RGBColor
cell_run.font.color.rgb = RGBColor(255,55,55) # 红色
复制表格,并插入在文档指定段落中插入复制的表格
from copy import deepcopy #导入copy模块
from docx import Document
document=Document("report_yang.docx")#读取已有的文档
tables = document.tables#获取文档中所有的表格
new_table = deepcopy(tables[0])#复制第一个表格,复制的表格也可以进行单元格的合并添加字段等操作
para1=document.paragraphs[14]#选取第15个段落
para1._p.addnext(new_table._element)#在第十五个段落的后边插入复制的表格
document.save('demo.docx')