使用pywin32库自动处理excel和word文档

因为每天需要做各种报表,所以想着通过技术手动来提高工作效率。pywin32库非常强大,可以让你对excel、word进行任何你想要的操作,只有你想不到的,没有它做不到的。这里给大家演示一下,如何用pywin32库自动修改excel格式内容,并将表格复制到word中。

1.安装pywin32库

pip install pywin32

2.导入pywin32模块

from win32com.client import DispatchEx
import os

3.打开excel,py文件、excel和word在同一个文件夹下,需要注意的是wps和offfice的接口名称不一样

"et.Application"和"wps.Application"对应wps正式版的excel和word

"ket.Application"和"kwps.Application"对应wps抢先版的excel和word

"EXCEL.Application"和"WORD.Application"对应office版的excel和word

# 打开excel
excel = DispatchEx('ket.Application') #office对应的applicatin不同
excel.Visible = 0  # 1为显示wps窗口,0为不显示wps窗口
# 获取项目所在的文件夹目录
base_path = os.path.dirname(__file__)
excel_name = '测试表格.xls'
# 拼接excel所在的绝对路径
excel_path = os.path.join(base_path, excel_name)
# 打开'人员信息表.xls'的Sheet1
wb = excel.WorkBooks.Open(excel_path)
ws = wb.Worksheets('Sheet1')

打开的excel

4.需求1.将excel第一行设置为筛选模式

# 获取表格行数
rows = ws.UsedRange.Rows.Count
ws.Range("A1:D1").AutoFilter() # 将第一行设置为自动筛选

5.需求2.将姓名为王XX,性别为男,年龄大于18岁的人所在行标记为红色,字体加粗,字体大小为20,字体为黑体

# 遍历每一行的内容,excel表格行号从1开始而非从0开始
for i in range(2, rows + 1):
    content = ws.Range(f"A{i}:D{i}").value # content为一个元组
    id,name,gender,age = content[0]
    if name.startswith('王') and gender=='男' and int(age)>=18:
        rng = ws.Range(f"A{i}:D{i}") # 获取符合条件的区域
        fnt = rng.Font # 字体属性
        fnt.Color = 255 # 字体设为红色
        fnt.Bold = True # 字体加粗
        fnt.Name = '黑体' # 字体设为黑体
        fnt.Size = 20 # 字体大小设为20

处理后的excel

6.需求3.将excel表格格式和内容一并复制到word指定位置

# 复制表格内容
ws.Range(f"A1:D{rows}").Copy()
# 打开word
word = DispatchEx('kwps.Application')#office对应的applicatin不同
word.Visible = 0 # 1为显示wps窗口,0为不显示wps窗口
word_name = '测试文档.doc'
word_path = os.path.join(base_path,word_name)
doc = word.Documents.Open(word_path)
# 定位word中需要添加表格的位置
rng = doc.Range()
rng.Find.Execute('此次添加一个表格')
# 粘贴表格内容
rng.Paste()

打开的word

处理后的word

7.另存excel和word

# 保存excel并关闭
new_excel_path = os.path.join(base_path,'这是新生成的excel表格.xls')
wb.SaveAs(new_excel_path)
wb.Close()
excel.Quit()
# 保存word并关闭
new_word_path = os.path.join(base_path,'这是新生成的word文档.doc')
doc.SaveAs(new_word_path)
doc.Close()
word.Quit()

8.我在使用pywin32的时候,pycharm没有代码补全提示,所有的接口都是自己在开发文档中一点点摸索的,附上微软office官方文档地址Microsoft.Office.Interop.Word 命名空间 | Microsoft Learn,wps和office基本一致。

9.附上全部代码

from win32com.client import DispatchEx
import os

# 打开excel
excel = DispatchEx('ket.Application')
excel.Visible = 0  # 1为显示wps窗口,0为不显示wps窗口
# 获取项目所在的文件夹目录
base_path = os.path.dirname(__file__)
excel_name = '测试表格.xls'
# 拼接excel所在的绝对路径
excel_path = os.path.join(base_path, excel_name)
# 打开'人员信息表.xls'的Sheet1
wb = excel.WorkBooks.Open(excel_path)
ws = wb.Worksheets('Sheet1')

# 需求1.将excel第一行设置为筛选模式
# 获取表格行数
rows = ws.UsedRange.Rows.Count
ws.Range("A1:D1").AutoFilter() # 将第一行设置为自动筛选

# 需求2.将姓名为王XX,性别为男,年龄大于18岁的人所在行标记为红色,字体加粗,字体大小为20,字体为黑体。
# 遍历每一行的内容,excel表格行号从1开始而非从0开始
for i in range(2, rows + 1):
    content = ws.Range(f"A{i}:D{i}").value # content为一个元组
    id,name,gender,age = content[0]
    if name.startswith('王') and gender=='男' and int(age)>=18:
        rng = ws.Range(f"A{i}:D{i}") # 获取符合条件的区域
        fnt = rng.Font # 字体属性
        fnt.Color = 255 # 字体设为红色
        fnt.Bold = True # 字体加粗
        fnt.Name = '黑体' # 字体设为黑体
        fnt.Size = 20 # 字体大小设为20

# 需求3.将excel表格格式和内容一并复制到word指定位置
# 复制表格内容
ws.Range(f"A1:D{rows}").Copy()
# 打开word
word = DispatchEx('kwps.Application')
word.Visible = 0 # 1为显示wps窗口,0为不显示wps窗口
word_name = '测试文档.doc'
word_path = os.path.join(base_path,word_name)
doc = word.Documents.Open(word_path)
# 定位word中需要添加表格的位置
rng = doc.Range()
rng.Find.Execute('此次添加一个表格')
# 粘贴表格内容
rng.Paste()


# 保存excel并关闭
new_excel_path = os.path.join(base_path,'这是新生成的excel表格.xls')
wb.SaveAs(new_excel_path)
wb.Close()
excel.Quit()
# 保存word并关闭
new_word_path = os.path.join(base_path,'这是新生成的word文档.doc')
doc.SaveAs(new_word_path)
doc.Close()
word.Quit()

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值