首页 > 其他分享 >记录word数据替换-1

记录word数据替换-1

时间:2024-05-27 23:44:58浏览次数:22  
标签:False 记录 doc list word path True 替换

# 导入模块
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

相关文章

  • 记录一个pdf转xlsx的方法
    importtkinter.filedialogimportpandasaspdimportosimportpdfplumberimporttkinterclassPdfReader:#output_file=tkinter.filedialog.asksaveasfile(title='保存到',initialfile=f"{name}.xlsx",filetypes=[("excel文件",......
  • CF 随机跳题记录
    \(0\)表示完全没看题解,\(1\)表示看了一点题解,\(2\)表示抄的题解。12001245B-RestrictedRPS【1】指令:/duelproblem1200constructive_algorithms标签:构造,贪心\(4\)发。aclink。第一眼看题感觉和构造完全没有关系。当可以使用的时候尽量使用,填上对应的字符串。如......
  • 推式子的做题记录
    「LOJ#3399」CommunicationNetwork首先列出式子,\(ans=\sum\limits_{T_2}|T_1\capT_2|2^{T_1\capT_2}\)注意到有\(f(S)=\sum\limits_{T\subseteqS}\sum\limits_{T'\subseteqT}(-1)^{T-T'}f(T')\)证明可考虑计算每个\(T'\)的贡献,由于\(T'\subse......
  • 不同厂商SOC芯片在视频记录仪领域的应用
    不同SoC公司芯片在不同产品上的应用信息:大唐半导体芯片型号:LC1860C(主控)+LC1160(PMU)产品应用:红米2A(399元)大疆晓Spark技术规格:28nm工艺,4个ARMCortex-A7处理器,1.5GHz主频,2核MaliT628GPU,1300万像素摄像处理,1080P@30fps编解码Movidius芯片型号:Myriad2......
  • 力扣刷题记录: 2134. 最少交换次数来组合所有的 1 Ⅱ
        这道题是第275场周赛的Q2,LC竞赛分为1748,主要考察滑动窗口。说实话这道题要想到是滑动窗口就很简单,否则就根本无从下手。方法一.滑动窗口(时间超过62.53%C++用户)        处理环形数组的一个很有效的技巧就是“追加”,把整个nums数组追加到nums数组后面,......
  • MySQL函数查询目录树问题记录
    DELIMITER//CREATEFUNCTION`getChildXzqhList`(rootIdBIGINT)RETURNSVARCHAR(4000)BEGINSETSESSIONgroup_concat_max_len=1000000;--设置为1MB设置GROUP_CONCAT函数输出的最大长度大小,太小的话整体会被截掉RETURN(WITH......
  • 记录接口操作日志, 原始数据和变更数据 这几个工具可以看看
    mzt-biz-log支持Springboot,基于注解的可使用变量、可以自定义函数的通用操作日志组件此组件解决的问题是:「谁」在「什么时间」对「什么」做了「什么事」Github地址:https://github.com/mouzt/mzt-biz-logMyBatis-Plus数据变动记录插件https://baomidou.com/plugins/data-ch......
  • pgsq的学习记录②——PostgreSQL基础用法
    PostgreSQL基础用法创建一个数据库操作数据库创建表删除表表插入数据查询表多表联查创建一个数据库创建一个名为postgres的数据库createdbpostgres操作数据库创建表创建表weatherCREATETABLEweather(cityvarchar(80),temp_lo......
  • 近期一次护网蓝队面试记录分享
    近期一次护网蓝队面试记录分享前言以下为近期的一次蓝队面试记录,答案为本人回答仅作参考,错误之处,多多包涵面试过程及回答自我介绍如实回答学校经历,是否参与项目,尽量简短把你参与的项目和成功说出来就行使用过哪些设备,出现误报怎么办(在校生未使用,网上搜的,背诵就行)天眼,EDR,全......
  • 记录一次WhatTheFuck经历
    起因很早之前就一直在维护一个git仓库,平时调研什么组件就会在里面新建一个springboot的工程用来编写示例代码。最一开始使用的是SpringInitializr,后来网站更新之后,只能生成JDK17+的工程,WhatTheFuck?近期刚从8切换到11.于是弃用并改用StartAliyun。今天调研ClickHouse,生成的......