表格
文件.add_table(rows = 多少行, cols = 多少列)
from docx import Document
文件 = Document('c:/test.docx')
列表 = [
['姓名','性别','年龄'],
['孙兴华','男',20],
['赵丽颖','女',33],
['李小龙','男',80],
['叶问','男',127]
]
r = 5
c = 3
表 = 文件.add_table(rows = r, cols = c)
for 行号 in range(r):
单元格 = 表.rows[行号].cells
for 列号 in range(c):
单元格[列号].text = str(列表[行号][列号])
文件.save('c:/test.docx')
添加行和列及查看行列数
from docx import Document
from docx.shared import Cm
文件 = Document('c:/test.docx')
文件.tables[0].add_row() # 表格最下方增加一行
文件.tables[0].add_column(Cm(5)) # 表格最右侧增加一列,一定要写列宽
print(f'现在第1个表的行是{len(文件.tables[0].rows)},列是{len(文件.tables[0].columns)}')
文件.save('c:/test.docx')
表格行和列的定位
row = table.rows[1]
column = table.columns[1]
删除表格中的行和列
删除表格中的行
from docx import Document
文件 = Document('c:/test.docx')
print(f'此文件中共{len(文件.tables)}个表格')
表1 = 文件.tables[0] # 获取第一个表格
print(f'表1的共{len(表1.rows)}行,{len(表1.columns)}列')
行 = 表1.rows[1] # 获取表格中的第2行
行._element.getparent().remove(行._element) # 删除行
print(f'删除表格中的第2行后,表1共{len(表1.rows)}行,{len(表1.columns)}列')
文件.save('c:/test.docx')
删除表格中的列
from docx import Document
文件 = Document('c:/test.docx')
print(f'此文件中共{len(文件.tables)}个表格')
表1 = 文件.tables[0] # 获取第一个表格
print(f'表1的共{len(表1.rows)}行,{len(表1.columns)}列')
列 = 表1.table.columns[1] # 获取表1中第2列
for 单元格 in 列.cells: # 遍历列中的单元格
单元格._element.getparent().remove(单元格._element) # 删除第2列的单元格
print(f'删除表格中的第2行后,表1共{len(表1.rows)}行,{len(表1.columns)}列')
文件.save('c:/test.docx')
from docx import Document
文件 = Document('c:/test.docx')
表1 = 文件.tables[0] # 获取第一个表格
i =0 # 标识行的序号
for 行 in 表1.rows: # 遍历取表格中的行
i += 1 # 行的序号从1开始
for 单元格 in 行.cells: # 遍历行中的单元格
print(f'第{i}行:',单元格.text)
文件.save('c:/test.docx')
表格的删除
from docx import Document
文件 = Document('c:/test.docx')
print(f'文件中表格总数:{len(文件.tables)}个')
表 = 文件.tables[1] # 获取第二个表格
表._element.getparent().remove(表._element) # 删除表格
print(f'删除后的表格总数:{len(文件.tables)}个')
文件.save('c:/test.docx')
设置单元格的值
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT # 导入段落对齐方式
文件 = Document('c:/test.docx')
# 方法1
表 = 文件.add_table(3, 3) # 为文档新增3行3列的表格
表.cell(0, 0).text = 'docu' # 为表格的(0,0)位置单元格赋值
# 方法2
段落 = 表.cell(0, 1).paragraphs[0] # 获取表格(0,1)位置单元格中的段落
段落.text = 'pic02'
段落 = 表.cell(0, 1).add_paragraph('第二个段落居中')
段落.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 设置段落居中
文件.save('c:/test.docx')
表格的录入
简单直接的方式进入录入
from docx import Document # 导入docx包
文件 = Document('c:/test.docx') # 新建docx文档
表 = 文件.add_table(2, 4)
表.cell(0, 0).text = '序号'
表.cell(0, 1).text = '姓名'
表.cell(0, 2).text = '年龄'
表.cell(0, 3).text = '身高'
# 表格赋值,将第二行作为数据输入第一行
表.cell(1, 0).text = '1'
表.cell(1, 1).text = '孙悟空'
表.cell(1, 2).text = '500'
表.cell(1, 3).text = '178'
文件.save('c:/test.docx')
按行录入
from docx import Document # 导入docx包
数据 = [['序号', '姓名', '年龄', '身高'], ['1', '孙悟空', '50', '178'], ['2', '猪八戒', '400', '165']]
文件 = Document('c:/test.docx') # 新建docx文档
表 = 文件.add_table(3, 4)
表头 = 表.rows[0].cells
for 列 in range(4):
表头[列].text = 数据[0][列] # ['序号', '姓名', '年龄', '身高']里面的第几个
# 录入数据
for 行 in range(1, 3):
表数据 = 表.rows[行].cells
for 列 in range(4): # 遍历列
表数据[列].text = 数据[行][列] # 数据中每一行是一个列表,每一列是一个元素
文件.save('c:/test.docx')
从表格中导入数据后按行录入
from docx import Document # 导入docx包
import pandas as pd
数据 = pd.read_excel('c:/test.xlsx',header=None)
文件 = Document('c:/test.docx')
表 = 文件.add_table(3, 4)
for 行 in range(3):
for 列 in range(4):
print(行,列) # 可以查看表格输出结果
表.cell(行,列).text = str(数据.iloc[行,列]) # 由于里面有数据型的,需要强制转字符
文件.save('c:/test.docx')
删除单元格数据
from docx import Document # 导入docx包
文件 = Document('c:/test.docx')
表 = 文件.tables[0] # 读取第1个表格
# 第一种方法,对单元格赋值为空
表.cell(0,0).text = "" # 将表的第1行第1列单元格赋值为空
# 第二种方法,对段落赋值为空
段落 = 表.cell(0,1).paragraphs[0].text = "" # 表的第1行第2列第1个段落赋值为空
文件.save('c:/test.docx')
删除表格行或列数据
删除表格行数据
from docx import Document # 导入docx包
文件 = Document('c:/test.docx')
表 = 文件.tables[0] # 读取第1个表格
for 单元格 in 表.rows[0].cells: # 遍历表格中第1行中所有的单元格
单元格.text = "" # 将所有单元格赋值为空
文件.save('c:/test.docx')
删除表格列数据
from docx import Document # 导入docx包
文件 = Document('c:/test.docx')
表 = 文件.tables[0] # 读取第1个表格
for 单元格 in 表.columns[0].cells: # 遍历表格中第1列中所有的单元格
单元格.text = "" # 将所有单元格赋值为空
文件.save('c:/test.docx')
表格对齐
参数 | 说明 |
---|---|
WD_TABLE_ALIGNMENT.LEFT | 左对齐 |
WD_TABLE_ALIGNMENT.CENTER | 居中对齐 |
WD_TABLE_ALIGNMENT.RIGHT | 右对齐 |
from docx.enum.table import WD_TABLE_ALIGNMENT # 导入表格对齐方式
from docx.shared import Cm # 导入单位转换函数
from docx import Document
文件 = Document('c:/test.docx') # 新建docx文档
表 = 文件.tables[0] # 指定第1个表格
表.alignment = WD_TABLE_ALIGNMENT.LEFT # 设置表格为左对齐
for 列 in 表.columns: # 表格1设置列宽为10cm
for 单元格 in 列.cells:
单元格.width = Cm(1)
文件.save('c:/test.docx')
单元格对齐
参数 | 说明 |
---|---|
WD_CELL_VERTICAL_ALIGNMENT.TOP | 单元格内容靠上对齐 |
WD_CELL_VERTICAL_ALIGNMENT.CENTER | 单元格内容居中对齐 |
WD_CELL_VERTICAL_ALIGNMENT.BOTTOM | 单元格内容靠下对齐 |
参数 | 说明 |
---|---|
WD_PARAGRAPH_ALIGNMENT.LEFT | 段落左对齐 |
WD_PARAGRAPH_ALIGNMENT.CENTER | 段落居中对齐 |
WD_PARAGRAPH_ALIGNMENT.RIGHT | 段落右对齐 |
WD_PARAGRAPH_ALIGNMENT.JUSTIFY | 段落两端对齐 |
from docx import Document # 导入docx
from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT # 导入单元格垂直对齐
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT # 导入段落对齐
文件 = Document('c:/test.docx')
表 = 文件.tables[0] # 指定第1个表格
单元格 = 表.cell(0,1) # 指定单元格
# 靠上居中对齐
单元格.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.TOP
单元格.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
文件.save('c:/test.docx')
对齐方式
对齐方式 | 参数 |
---|---|
靠上两端对齐 | 单元格.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.TOP 单元格.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY |
靠上右对齐 | 单元格.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.TOP 单元格.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT |
中部两端对齐 | 单元格.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER 单元格.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY |
中部居中对齐 | 单元格.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER 单元格.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER |
中部右对齐 | 单元格.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER 单元格.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT |
靠下两端对齐 | 单元格.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.BOTTOM 单元格.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY |
靠下中部对齐 | 单元格.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.BOTTOM 单元格.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER |
靠下右对齐 | 单元格.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.BOTTOM 单元格.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT |
表格样式
from docx import Document
from docx.oxml.ns import qn # 中文字体
文件 = Document()
表 = 文件.add_table(3, 3, style="Medium Grid 1 Accent 1")
表头 = 表.rows[0].cells
表头[0].text = '姓名'
表头[1].text = '性别'
表头[2].text = '年龄'
# 将表格中所有单元格修改字体
for 行 in 表.rows:
for 单元格 in 行.cells:
for 段落 in 单元格.paragraphs:
for 块 in 段落.runs:
块.font.name = 'Arial' # 英文字体设置
块._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑') # 设置中文字体
文件.save('c:/test.docx')
查看所有支持的表格样式
from docx.enum.style import WD_STYLE_TYPE # 读标题笔记05
from docx import Document # 可以写成 from docx import *
文件 = Document()
所有样式 = 文件.styles
#生成所有表样式
for 样式 in 所有样式:
if 样式.type == WD_STYLE_TYPE.TABLE:
文件.add_paragraph("表格样式 : "+ 样式.name)
表 = 文件.add_table(3,3, style = 样式)
单元格 = 表.rows[0].cells
单元格[0].text = '第一列内容'
单元格[1].text = '第二列内容'
单元格[2].text = '第三列内容'
文件.add_paragraph("\n")
文件.save('c:/style.docx') # 这个文档里就包含了所有支持的样式