用Python的PyWin32库,一键主动化Word文档处理处罚!

打印 上一主题 下一主题

主题 855|帖子 855|积分 2565


   你好,我是忆~遂愿,全网4w+粉丝,《遂愿盈创》社群主理人。
副业动身① | 遂愿盈创(对副业感兴趣免费可入,多种赢利实战项目等你来,一起探寻副业快速变现的途径;以及对接互联网大厂商务互助,一起来搞点小外快,认识更多互联网大咖)
目前群里已经带很多小伙伴(大部分大学生)变现几百块啦,程序员搞副业有额外加成~ 对副业感兴趣可+V : suiyuan2ying 拉你进群。
  办公主动化是每个程序员都绕不开的话题。写代码归写代码,可文档工作还是要做的。
本日咱就聊聊怎么用Python来处理处罚Word文档,让枯燥的文档工作变得轻松又风趣。
PyWin32这个库简直就是Office主动化的神器,它能让Python直接调用Word的各种功能,就像你手动操作Word一样。
安装设置

在开始之前得先把环境搭起来,装个PyWin32库:
  1. pip install pywin32
复制代码
装完之后导入需要的模块:
  1. import win32com.client as win32
  2. import os
复制代码
温馨提示:有些小伙伴可能会碰到安装失败的情况,多半是因为Python版本不匹配。
建议利用Python 3.6以上的版本,实在装不上可以试试用管理员权限运行命令行。
创建Word文档

先来个简单的,创建一个新文档:
  1. word = win32.Dispatch('Word.Application')
  2. word.Visible = True  # 这句可以让Word窗口显示出来
  3. doc = word.Documents.Add()
复制代码
这里的word.Visible = True实在是可选的。要是设成False,Word就会在后台运行,界面上看不到。
不外我建议在开发调试的时间设成True,如许能直观地看到代码在对文档做什么操作。
写入和格式化文本

往文档里加点内容,顺便整点格式:
  1. selection = word.Selection
  2. selection.TypeText('Python自动化办公真香!\n')
  3. selection.Font.Size = 16
  4. selection.Font.Bold = True
  5. # 换个段落
  6. selection.TypeParagraph()
  7. selection.TypeText('这段文字是普通大小的~')
  8. selection.Font.Size = 12
  9. selection.Font.Bold = False
  10. # 添加一些花里胡哨的格式
  11. selection.TypeParagraph()
  12. text = selection.Range
  13. text.Text = "来点彩色的文字"
  14. text.Font.Color = 255  # 红色
  15. text.Font.Name = "微软雅黑"
  16. text.Font.Italic = True
复制代码
玩转表格

表格必须得整一个,这可是文档里的重头戏:
  1. table = doc.Tables.Add(selection.Range, 3, 3)  # 3行3列的表格
  2. table.Borders.Enable = True  # 显示表格边框
  3. # 填充表格内容
  4. table.Cell(1,1).Range.Text = "第一行第一列"
  5. table.Cell(1,2).Range.Text = "第一行第二列"
  6. table.Cell(1,3).Range.Text = "第一行第三列"
  7. # 设置表格样式
  8. table.Style = "网格型"
  9. table.Rows(1).Shading.BackgroundPatternColor = 255  # 第一行背景设为红色
复制代码
表格还能归并单位格、调整列宽、设置对齐方式:
  1. # 合并单元格
  2. table.Cell(2,1).Merge(table.Cell(2,2))
  3. # 调整列宽
  4. table.Columns(1).Width = 100
  5. # 设置对齐方式
  6. table.Cell(1,1).Range.ParagraphFormat.Alignment = 1  # 1是居中对齐
复制代码
插入图片和形状

文档里不能光有字,得来点图片和形状粉饰一下:
  1. # 插入图片
  2. selection.TypeParagraph()
  3. pic = selection.InlineShapes.AddPicture(os.path.abspath("test.jpg"))
  4. pic.Width = 200  # 调整图片大小
  5. pic.Height = 150
  6. # 插入形状
  7. shape = doc.Shapes.AddShape(1, 100, 100, 100, 100)  # 类型、左边距、上边距、宽度、高度
  8. shape.Fill.ForeColor.RGB = (255, 0, 0)  # 设置填充颜色
  9. shape.Line.ForeColor.RGB = (0, 0, 255)  # 设置边框颜色
复制代码
页面设置和页眉页脚

整个文档的格式也得讲究:
  1. # 页面设置
  2. doc.PageSetup.TopMargin = 72  # 上边距(72磅 = 1英寸)
  3. doc.PageSetup.BottomMargin = 72
  4. doc.PageSetup.LeftMargin = 72
  5. doc.PageSetup.RightMargin = 72
  6. doc.PageSetup.Orientation = 1  # 1是纵向,0是横向
  7. # 添加页眉
  8. header = doc.Sections(1).Headers(1)
  9. header.Range.Text = "这是页眉"
  10. header.Range.Font.Size = 12
  11. header.Range.ParagraphFormat.Alignment = 1  # 居中对齐
  12. # 添加页脚
  13. footer = doc.Sections(1).Footers(1)
  14. footer.Range.Text = "第 "
  15. footer.Range.Fields.Add(footer.Range, -1, "PAGE")  # 插入页码
复制代码
批量处理处罚文档

要是有一堆文档要处理处罚,可以整个循环,还能加上进度提示:
  1. def process_docs(folder_path):
  2.     word = win32.Dispatch('Word.Application')
  3.     files = [f for f in os.listdir(folder_path) if f.endswith('.docx')]
  4.     total = len(files)
  5.    
  6.     for idx, filename in enumerate(files, 1):
  7.         print(f'正在处理: {filename} ({idx}/{total})')
  8.         try:
  9.             doc = word.Documents.Open(os.path.join(folder_path, filename))
  10.             # 在这里写处理文档的代码
  11.             doc.Save()
  12.             doc.Close()
  13.         except Exception as e:
  14.             print(f'处理文件 {filename} 时出错: {str(e)}')
  15.    
  16.     word.Quit()
复制代码
实用小本领


  • 逼迫关闭Word进程:
  1. import os
  2. def kill_word_process():
  3.     os.system('taskkill /f /im WINWORD.EXE')
复制代码

  • 异常处理处罚和主动重试:
  1. import time
  2. def retry_on_error(func, max_attempts=3):
  3.     for attempt in range(max_attempts):
  4.         try:
  5.             return func()
  6.         except Exception as e:
  7.             if attempt == max_attempts - 1:
  8.                 raise e
  9.             print(f'操作失败,{attempt + 1}秒后重试...')
  10.             time.sleep(attempt + 1)
复制代码

  • 文档另存为PDF:
  1. def save_as_pdf(doc, pdf_path):
  2.     try:
  3.         doc.SaveAs(pdf_path, FileFormat=17)  # 17是PDF格式
  4.     except Exception as e:
  5.         print(f'转换PDF失败: {str(e)}')
复制代码

  • 查找和替换文本:
  1. def find_and_replace(doc, find_text, replace_text):
  2.     word_range = doc.Content
  3.     word_range.Find.Execute(
  4.         FindText=find_text,
  5.         ReplaceWith=replace_text,
  6.         Replace=2  # 2表示全部替换
  7.     )
复制代码
温馨提示:在处理处罚大量文档时,记得定期保存,还要做好异常处理处罚。要是处理处罚到一半断电大概程序崩溃,至少不会半途而废。
性能优化小贴士

处理处罚大量文档时,可以关闭一些Word的主动功能来提拔性能:
  1. def optimize_word_settings(word):
  2.     word.DisplayAlerts = False  # 关闭警告提示
  3.     word.ScreenUpdating = False  # 关闭屏幕刷新
  4.     word.EnableAnimations = False  # 关闭动画效果
  5.    
  6. def restore_word_settings(word):
  7.     word.DisplayAlerts = True
  8.     word.ScreenUpdating = True
  9.     word.EnableAnimations = True
复制代码
PyWin32真是个宝藏库,用它处理处罚文档既省时又省力。
不外写代码的时间得多测试,究竟主动化操作一个不小心可能会搞丢文档内容。
建议每次运行前都备份一下重要文件,否则哭都没地方哭。
代码写完了,文档主动生成了,这下可以摸鱼了~不是,是可以去做更有意义的事变了!
对了,要是以为PyWin32用起来还不敷顺手,还可以试试python-docx这个库,不外那就是另一个故事了。
末了提一句,对副业感兴趣可以看下方的微信二维码~

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表