python读word中的表格和插入表格

读取word中的表格

有时候需要从word中读取表格数据。不同于excel,word中表格的对象属性是Table。

示例文档如下:

读取效果:

复制代码
行: 6 , 列: 3
['物料', '数量', '单价']
['车轮', '2', '100']
['坐垫', '1', '20']
['车把', '1', '5']
['车锁', '1', '13']
['总加', '138']

注意到表格最后一行有合并的单元格,目前的读取方法对于合并的单元格按照1个列单元读取!

代码:

复制代码
python 复制代码
import win32com.client as win32
from win32com.client import constants
import os

doc_app = win32.gencache.EnsureDispatch('Word.Application')#打开word应用程序
doc_app.Visible = True
curr_path = os.getcwd()
file_path = r'%s\带表格文档.docx'%curr_path
doc = doc_app.Documents.Open(file_path)

table = doc.Tables(1)
print('行:',table.Rows.Count, ', 列:', table.Columns.Count)
for row in table.Rows:#遍历表格每行
	info = []
	for cell in row.Cells:#遍历每行中的表格,即有效列
		info.append(cell.Range.Text[:-2])
	print(info)

读取word中带有合并单元格的表格

python 复制代码
print('有效单元格个数:',table.Range.Cells.Count)
for cell in table.Range.Cells:
	print(cell.RowIndex, ',', cell.ColumnIndex,',',cell.Range.Text[:-2])

word的对象中,无法直接判断单元格是否列合并或者行合并的。可以间接通过table.Cells来访问有效的单元格。如果访问cell.Row或者cell.Column,遇到合并的单元格会报错。

运行结果:

python 复制代码
有效单元格个数: 20
1 , 1 , 
1 , 2 , 物料
1 , 3 , 数量
1 , 4 , 单价
2 , 1 , 零件
2 , 2 , 车轮
2 , 3 , 2
2 , 4 , 100
3 , 2 , 坐垫
3 , 3 , 1
3 , 4 , 20
4 , 2 , 车把
4 , 3 , 1
4 , 4 , 5
5 , 2 , 车锁
5 , 3 , 1
5 , 4 , 13
6 , 1 , 
6 , 2 , 总加
6 , 3 , 138

在word中插入表格

脚本效果:

脚本实现的内容:在新的word文档中插入一个表格,并写入脚本的内容。

复制代码
python 复制代码
import win32com.client as win32
from win32com.client import constants
import os

doc_app = win32.gencache.EnsureDispatch('Word.Application')#打开word应用程序
doc = doc_app.Documents.Add()
doc_app.Visible = True

last_parag = doc.Paragraphs.Last
# 创建新的表格
table = doc.Tables.Add(Range=last_parag.Range, NumRows=3, NumColumns=4)
# 设置表格边框内外线
table.Borders.InsideLineStyle = constants.wdLineStyleSingle 
table.Borders.OutsideLineStyle = constants.wdLineStyleDouble 

#写入表格
cnt=0
for row in table.Rows:#遍历表格每行
	for cell in row.Cells:#遍历每行中的表格,即有效列
		cell.Range.Text = cnt
		cnt += 1 

插入第二个表格

复制代码
python 复制代码
#插入第二个表格
last_parag = doc.Paragraphs.Last
table2 = doc.Tables.Add(Range=last_parag.Range, NumRows=3, NumColumns=4)
table2.Borders.InsideLineStyle = constants.wdLineStyleSingle 
table2.Borders.OutsideLineStyle = constants.wdLineStyleDouble 

插入效果:

第二个表格插入效果,看起来和第一个连在一起了

调整一下,在第二个表格后面插入一个新的空行,拉开一段的距离。

复制代码
python 复制代码
#插入第二个表格
doc.Paragraphs.Add()# 插入新的一行
last_parag = doc.Paragraphs.Last #指向最后一行(刚插入的那一行)
table2 = doc.Tables.Add(Range=last_parag.Range, NumRows=3, NumColumns=4)
table2.Borders.InsideLineStyle = constants.wdLineStyleSingle 
table2.Borders.OutsideLineStyle = constants.wdLineStyleDouble 

遍历文档中的表格

python 复制代码
for table in doc.Tables:
    print(table.Row(1).Cells(1).Range.Text) # 打印每个表格中左上角单元格的内容
相关推荐
tanyongxi6620 分钟前
C++ 特殊类设计与单例模式解析
java·开发语言·数据结构·c++·算法·单例模式
遗憾皆是温柔22 分钟前
24. 什么是不可变对象,好处是什么
java·开发语言·面试·学习方法
wearegogog12343 分钟前
C语言中的输入输出函数:构建程序交互的基石
c语言·开发语言·交互
Fine姐1 小时前
The Network Link Layer: 无线传感器中Delay Tolerant Networks – DTNs 延迟容忍网络
开发语言·网络·php·硬件架构
HAPPY酷1 小时前
给纯小白的Python操作 PDF 笔记
开发语言·python·pdf
liulilittle1 小时前
BFS寻路算法解析与实现
开发语言·c++·算法·宽度优先·寻路算法·寻路
阿珊和她的猫2 小时前
autofit.js: 自动调整HTML元素大小的JavaScript库
开发语言·javascript·html
喜欢吃燃面2 小时前
C++算法竞赛:位运算
开发语言·c++·学习·算法
传奇开心果编程2 小时前
【传奇开心果系列】Flet框架实现的家庭记账本示例自定义模板
python·学习·ui·前端框架·自动化
草莓熊Lotso2 小时前
《详解 C++ Date 类的设计与实现:从运算符重载到功能测试》
开发语言·c++·经验分享·笔记·其他