# 导入模块
import tkinter.filedialog
import os
from win32com.client import Dispatch
import pandas as pd
import win32com.client
# 转换doc文件
def replace_main(word, old_text, new_text, output_path):
# word.Selection.Find.ClearFormatting()
# word.Selection.Find.Replacement.ClearFormatting()
# 1.True--区分大小写,2.True--完全匹配的单词,并非单词中的部分(全字匹配)3.True--使用通配符,
# 4.True--同音,5.True--查找单词的各种形式,6.True--向文档尾部搜索,7.True--带格式的文本。
# 2 - -替换个数(0表示不替换,1 表示只替换匹配到的第一个,2 表示全部替换)True--区分大小写,不可省略
# word.Selection.Find.Execute(old_text, False, False, False, False, False, True, 1, False, new_text, 2)
word.Selection.Find.Execute(old_text, False, False, False, False, False, True, 1, False, new_text, 2)
#
# def main():
# # 定义文件夹路径和Word应用程序对象
# folder_path = r"C:\临时"
# # 遍历文件夹中所有的.doc文件,并将其转换为.docx格式
# for root, dirs, files in os.walk(folder_path):
# for file in files:
# if file.endswith(".doc"):
# file_path = os.path.join(root, file)
# doc_to_docx(file_path, word)
#
# # 关闭Word应用程序
# word.Quit()
#
# print("全部doc文件已经全部转换为docx!")
# # 创建doc对象
# doc = Document('文档.docx')
def replace_word(doc_path, excel_path):
"""
定义批量替换文字的函数
:param doc_path: 上传的word模板
:param excel_path: excel的数据表
:return:
"""
# 读取数据文件
df = pd.read_excel(excel_path, dtype=str)
df.fillna('', inplace=True)
word = win32com.client.Dispatch("Word.Application") # 模拟打开 office
for i in df.iterrows():
# 迭代df,并将列明和每一行内容组成字典
data_dict = dict(i[1])
# 列表化并压缩表头 行内容 分配给旧值与新值(eg:倒转list内容,避免mark1替换mark11为 替换内容1 ,优先替换mark11
old_word_list = list(data_dict.keys())
new_word_list = list(data_dict.values())
old_word_list.reverse()
new_word_list.reverse()
# print(old_word_list, new_word_list)
# 打开word
doc = word.Documents.Open(doc_path)
output_path = os.path.join(os.path.dirname(doc_path), list(data_dict.values())[0] + '.' + doc_path.split('.')[-1])
# 用倒转后的列表,进行替换
for old_word, new_word in zip(old_word_list, new_word_list):
word.Selection.Find.Execute(old_word, False, False, False, False, False, True, 1, False, new_word, 2)
print(output_path, old_word, '已替换', new_word)
doc.SaveAs(output_path)
doc.Close(SaveChanges=True)
word.Quit()
# 执行替换函数
print('输入word模板路径')
doc_path = tkinter.filedialog.askopenfilename(title='请选择word模板路径') # r'E:\开发\1565-法人变更模板填写机器人\法人变更模板填写机器人20230103\模板.doc'
print('输入excel路径')
excel_path = tkinter.filedialog.askopenfilename(title='请选择excel模板路径') # r'E:\开发\1565-法人变更模板填写机器人\法人变更模板填写机器人20230103\excel数据.xlsx'
replace_word(doc_path, excel_path)
标签:False,记录,doc,list,word,path,True,替换
From: https://www.cnblogs.com/AZ26/p/18216867