前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python自动化办公-处理word文档

Python自动化办公-处理word文档

作者头像
用户9925864
发布2022-07-27 08:27:25
4980
发布2022-07-27 08:27:25
举报
文章被收录于专栏:算法工程师的学习日志

年底项目投标,需要整理大量的内容,标书的很多内容是其实是之前的标书重复的,可以把对应的各个部分内容合并,然后再处理格式等。如果采用常规操作每次操作需要打开子目录——>找到word文档——>全选复制——>粘贴到新文档——>调整格式——>核对检查,期间出现错误还得用更多的时间,这太浪费时间了!

采用Python的组间对象模型(COM)设计了一个同时对多个word文件进行合并的程序,代码如下:

代码语言:javascript
复制
import win32com.client as win32
import os
word = win32.gencache.EnsureDispatch('Word.Application')
#启动word对象应用
word.Visible = False
path = r'D:\doc'
files = []
for filename in os.listdir(path):
    filename = os.path.join(path,filename)
    files.append(filename)
#新建合并后的文档
output = word.Documents.Add()
for file in files:
    output.Application.Selection.InsertFile(file)#拼接文档
#获取合并后文档的内容
doc = output.Range(output.Content.Start, output.Content.End)
output.SaveAs(r'D://doc//result.docx') #保存
output.Close()

大概等了两三分钟一份110多页、2万多字的报告就自动完成了,

win32com库的一些其他的用法

1、添加多级标题

代码语言:javascript
复制
from win32com.client import constants

doc_app = win32.gencache.EnsureDispatch('Word.Application')#打开word应用程序
doc_app.Visible =1#设置应用程序可见
doc = doc_app.Documents.Add()#创建新得文档

#添加标题1
##添加文字
parag = doc.Paragraphs.Add()#添加新得段落
parag_range = parag.Range
parag_range.Text ='标题1'
###设置样式
parag_range.Style = doc.Styles("Heading 1")#Heading 1 是样式的名称

border = parag.Borders(constants.wdBorderBottom)
border.LineStyle = constants.wdLineStyleSingle
border.LineWidth = constants.wdLineWidth225pt

#添加标题2
parag_range.Text +='\n'
parag = doc.Paragraphs.Add()
parag_range = parag.Range
parag_range.Text ='标题2'
parag_range.Style = doc.Styles("Heading 2")#二级标题
##添加正文
parag_range.Text +='\n'
parag = doc.Paragraphs.Add()
parag_range = parag.Range
parag_range.Text ='正文'
parag_range.Style = doc.Styles("Normal")#正文

使用add不会添加新的一个段落,而是指向当前所在的段落。

2、插入目录

代码语言:javascript
复制
import win32com.client as win32
from win32com.client import constants

doc_app = win32.gencache.EnsureDispatch('Word.Application')
doc_app.Visible =1
doc = doc_app.Documents.Add()

#添加标题1
##添加文字
parag = doc.Paragraphs.Add()
parag_range = parag.Range
parag_range.Text ='标题1'
###设置样式
parag_range.Style = doc.Styles("Heading 1")#Heading 1 是样式的名称

border = parag.Borders(constants.wdBorderBottom)
border.LineStyle = constants.wdLineStyleSingle
border.LineWidth = constants.wdLineWidth225pt

#添加标题2
parag_range.InsertParagraphAfter()#在当前位置之后,新插入一行
parag_range = parag.Range
parag_range.Text ='标题2'
parag_range.Style = doc.Styles("Heading 2")#二级标题
##添加正文
parag_range.InsertParagraphAfter()
parag_range = parag.Range
parag_range.Text ='正文'
parag_range.Style = doc.Styles("Normal")#正文
##插入目录
##parag_range = doc.Paragraphs(1)##找到第一行
doc.Paragraphs(1).Range.InsertParagraphBefore()#在首行之前插入一行,用于插入目录
parag_range = doc.Paragraphs(1).Range#指向新插入的行
#插入目录
##从当前指向的位置插入目录,使用默认样式设置目录样式,包含3级标题
doc.TablesOfContents.Add(Range=parag_range, UseHeadingStyles=True,LowerHeadingLevel=3)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档