环球精选!Python实现自动化处理Word文档的方法详解
目录
1. 批量生成Word文档2. 将Word文档批量转换成PDF3. 在Word文档中批量标记关键词4. 在Word文档中批量替换关键词使用Python实现Word文档的自动化处理,包括批量生成Word文档、在Word文档中批量进行查找和替换、将Word文档批量转换成PDF等。
【资料图】
1. 批量生成Word文档
安装openpyxl模块
pip install openpyxl
安装python-docx模块
pip install python-docx
openpyxl模块可以读写扩展名为.xlsx/.xlsm/.xltx/.xltm的Excel文件。
python-docx模块可以读写扩展名为.docx的Word文档,但不能处理扩展名为.doc的Word文档。
import re from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT, WD_TABLE_ALIGNMENT from openpyxl import load_workbook from docx import Document def info_update(doc, old_info, new_info): """ 文档内容替换 :param doc: Word模板文档 :param old_info: 源文本 :param new_info: 新文本 :return: """ # 遍历Word文档中的所有段落 for para in doc.paragraphs: # 遍历每个段落中的run对象 for run in para.runs: # 替换run对象的文本内容 # run.text = run.text.replace(r"《"+old_info+"》", new_info) run.text = run.text.replace(old_info, new_info) run.text = re.sub(r"[《》]", "", run.text) # 遍历Word文档中的所有表格 for table in doc.tables: # 遍历表格中的所有行 for row in table.rows: # 遍历行中的所有单元格 for cell in row.cells: # 替换单元格内容 cell.text = cell.text.replace("《" + old_info + "》", new_info) # 设置表格中的内容居中显示 # 计算表格的rows和cols的长度 rows = len(table.rows) cols = len(table.columns) # 循环将每一行,每一列都设置为居中 for r in range(rows): for c in range(cols): table.cell(r, c).vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER # 垂直居中 table.cell(r, c).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER # 水平居中 wb = load_workbook("学生成绩表.xlsx") # 打开工作簿 ws = wb.active # 激活工作簿中的工作表 # 遍历工作表的行,从第2行开始 for row in range(2, ws.max_row + 1): doc = Document("成绩通知书.docx") # 创建文档对象 # 遍历工作表的列 for col in range(1, ws.max_column + 1): # 读取当前列的第一行,即列标题,单元格的值转换成字符串 old_info = str(ws.cell(row=1, column=col).value) # 读取当前列的数据,单元格的值需要转换成字符串 new_info = str(ws.cell(row=row, column=col).value) # 进行内容替换 info_update(doc, old_info, new_info) student_name = str(ws.cell(row=row, column=1).value) doc.save(f"scores\\成绩单--致{student_name}.docx")
测试文件:
测试效果:
2. 将Word文档批量转换成PDF
安装pywin32模块
pip install pywin32
from pathlib import Path from win32com.client import constants, gencache # 创建Path对象 # 路径要使用绝对路径 src_folder = Path(r"E:\pythonProject\python办公自动化\第5章 自动化处理Word文档\scores") output_folder = Path(r"E:\pythonProject\python办公自动化\第5章 自动化处理Word文档\PDF") # 判断输出目录是否存在 if not output_folder.exists(): # 不存在则创建 output_folder.mkdir(parents=True) file_list = list(src_folder.glob("*[.docx|.doc]")) # 获得要转换的Word文档的路径列表 word = gencache.EnsureDispatch("Word.Application") # 创建Word程序对象 # word = win32com.client.Dispatch("Word.Application") for word_path in file_list: # 生成转换后的PDF文件的保存路径 pdf_path = output_folder / word_path.with_suffix(".pdf").name # with_suffix()返回文件后缀已更改的新路径 # 判断pdf文件路径是否已存在 if pdf_path.exists(): continue else: # 路径需要是绝对路径,否则会报错 doc = word.Documents.Open(str(word_path), ReadOnly=1) # 打开Word文档 # 设置导出格式为pdf doc.ExportAsFixedFormat(str(pdf_path), constants.wdExportFormatPDF) # 将打开的Word文档另存为PDF文件,保存到给定的路径 doc.Close() # 关闭Word文档 word.Quit() # 关闭Word程序窗口
测试文件:
测试效果:
3. 在Word文档中批量标记关键词
import win32com.client as win32 # 路径要使用绝对路径 input_file = r"E:\pythonProject\python办公自动化\第5章 自动化处理Word文档\劳动合同.docx" output_file = r"E:\pythonProject\python办公自动化\第5章 自动化处理Word文档\劳动合同1.docx" word = win32.gencache.EnsureDispatch("Word.Application") # 打开一个Word程序窗口 word.Visible = False # 设置窗口为隐藏状态,即在后台运行 cs = win32.constants # 导入Word开发接口提供的预设常量集合 doc = word.Documents.Open(input_file) # 打开要处理的Word文档 # 设置要标记的关键词列表 keyword_list = ["报酬", "保险", "培训", "解除", "终止"] # 设置每个关键词的突出显示颜色 color_list = [cs.wdYellow, 14, cs.wdGreen, cs.wdRed, 13] """ 值--颜色常量--含义: 1--wdBlack--黑色 2--wdBlue--蓝色 3--wdTurquoise--青绿色 4--wdBrightGreen--鲜绿色 5--wdPink--粉红色 6--wdRed--红色 7--wdYellow--黄色 8--wdWhite--白色 9--wdDarkBlue--深蓝色 10--wdTeal--青色 11--wdGreen--绿色 12--wdViolet--紫罗兰色 13--wdDarkRed--深红色 14--wdDarkYellow--深黄色 15--wdGray50--50%灰色 16--wdGray25--25%灰色 """ for w, c in zip(keyword_list, color_list): # 使用zip()函数将关键词列表和标记颜色列表中的元素一一配对分别赋给w和c word.Options.DefaultHighlightColorIndex = c # 设置突出显示的颜色 findObj = word.Selection.Find # 创建Find对象 findObj.ClearFormatting() # 清除查找文本的格式,表示查找文本时不限制文本格式 findObj.Text = w # 设置查找文本 findObj.Replacement.ClearFormatting() # 清除替换文本的格式设置 findObj.Replacement.Text = w # 将替换文本设置为与查找文本相同的值 findObj.Replacement.Font.Bold = True # 设置替换文本的格式为加粗 findObj.Replacement.Font.Italic = True # 设置替换文本的格式为斜体 findObj.Replacement.Font.Underline = cs.wdUnderlineDouble # 设置替换文本加双下划线 findObj.Replacement.Highlight = True # 设置替换时对文本做突出显示 findObj.Execute(Replace=cs.wdReplaceAll) # 执行查找和替换,wdReplaceAll表示全部替换 # 将处理后的word文档以新的文件名另存 doc.SaveAs(output_file) # 关闭Word文档 doc.Close() # 关闭Word程序窗口 word.Quit()
测试效果:
4. 在Word文档中批量替换关键词
from pathlib import Path import win32com.client as win32 # 创建Path对象 src_folder = Path(r"E:\pythonProject\python办公自动化\第5章 自动化处理Word文档\Files") output_folder = Path(r"E:\pythonProject\python办公自动化\第5章 自动化处理Word文档\output_files") # 判断输出文件夹是否存在 if not output_folder.exists(): # 创建文件夹 output_folder.mkdir(parents=True) file_list = list(src_folder.glob("*.docx")) # 获得给定文件的word文档路径列表 # 以替换前的关键词作为建,以替换后的内容作为值,建立字典 replace_dict = {"确定": "确认", "订立": "签订", "执行": "履行"} word = win32.gencache.EnsureDispatch("Word.Application") # 打开Word程序窗口 word.Visible = False # 设置窗口隐藏 cs = win32.constants # 导入Word开发接口提供的预设常量集合 for file in file_list: doc = word.Documents.Open(str(file)) # 打开Word文档 print(file.name) for old_txt, new_txt in replace_dict.items(): findObj = word.Selection.Find # 创建Find对象 findObj.ClearFormatting() # 清除查找文本的格式,表示查找文本时不限制文本格式 findObj.Text = old_txt # 设置查找文本 findObj.Replacement.ClearFormatting() # 清除替换文本的格式设置 findObj.Replacement.Text = new_txt # 设置替换文本 # 判断Find对象的Execute()函数在文档中是否找到关键词 if findObj.Execute(Replace=cs.wdReplaceAll): # 执行查找和替换,wdReplaceAll表示全部替换 print(f"{old_txt}-->{new_txt}") new_file = output_folder / file.name # 生成输出文件的路径 doc.SaveAs(str(new_file)) # # 将处理后的word文档以新的文件名另存 doc.Close() # 关闭Word文档 word.Quit() # 关闭Word程序窗口
测试效果:
以上就是Python实现自动化处理Word文档的方法详解的详细内容,更多关于Python自动化处理Word的资料请关注脚本之家其它相关文章!
X 关闭
X 关闭
- 1联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 2亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 3现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 4如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 5AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 6转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 7充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 8好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 9名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?
- 10亚马逊云科技成立量子网络中心致力解决量子计算领域的挑战