python-记录word数据替换-1

# 导入模块
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)
posted @ 2024-05-27 23:34  AZ26  阅读(61)  评论(0)    收藏  举报