Python批量替换Excel和Word中的关键字

这篇具有很好参考价值的文章主要介绍了Python批量替换Excel和Word中的关键字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、问题的提出

有时,我们手头上有多个Excel或者Word文件,但是领导突然要求对某几个术语进行批量的修改,你是不是有要崩溃的感觉。因为这么多文件,要一个一个地打开文件,再进行批量替换修改,几个文件还好,如果是成百上千的文件,我想你一会儿就感觉自己被搞晕了,不仅搞不清修改了没有修改完,而且已经修改的也不知道修改的彻底不。

于是,问题来了,当我需要对多个Excel和Word文件中的关键字进行替换,而且不改变原文件的格式,同时删除源文件,我们该怎么办?这些office文件可能分布在不同的文件夹下,所以替换后还要存放在原来的文件夹。同时,我们编写的程序还要在Windows和MacOS环境下都可以使用。

二、算法分析

由于要在多个环境下使用,我们放弃VBA,考虑采用Python编程的方法来解决。

1. 第一步 读取一个替换关键字的"批量替换表.xlsx"生成一个字典,这样是为了后面可以批量替换。第二步 遍历当前目录下所有目录包括上当的文件,主要是docx和xlsx文件,如果是doc和xls文件,还要考虑两这两种格式的文件进行批量的转化,见下面的文章 。

批量转doc和xls为docx和xlsx文件

2. 第二步是 遍历当前所有目录中的文件,用if条件,根据文件扩展名的不同来筛选出docx和xlsx文件。代码如下:

    for root, filefolder, files in os.walk(os.curdir):
        for file in files:
            if file.endswith("docx"):
                file_path = os.path.join(root, file)
                for key, value in dic.items():
                    word_replace_keywords(file_path, key, value)
            elif file.endswith("xlsx") and os.path.basename(file)!="批量替换表.xlsx":
                file_path = os.path.join(root, file)
                for key, value in dic.items():
                    excel_replace_keywords(file_path, key, value)

3. 第三步是对于docx和xlsx文件分别进行替换处理,主要采用了python-docx和openpyxls这两个模块来进行替换。针对docx文件,我们用Document()来读取,用以下代码来替换:

def info_update(doc, old, new):
    for para in doc.paragraphs:
        for run in para.runs:
            if old in run.text:
                run.text = run.text.replace(old, new)

对于xlsx文件我,我们通过下面的代码实现关键字替换,同时不改变原来关键字的格式。

def replace_cell_text_with_format(cell, keyword, replacement):
    paragraphs = cell.paragraphs
    for paragraph in paragraphs:
        for run in paragraph.runs:
            if keyword in run.text:
                new_text = run.text.replace(keyword, replacement)
                run.clear()  # 清除当前文本
                new_run = run._element  # 创建新的run
                new_run.text = new_text  # 设置新文本
                for key in run._r.attrib.keys():  # 复制格式属性
                    if key != 't':
                        new_run.attrib[key] = run._r.attrib[key]

4. 第四步 我们要保存替换后的文件,同时用os.remove()删除原来的文件。

三、代码展示

最终,我们编制出70多行的代码,一键实现了多文件、多关键字、保存源格式,又能在Windows和苹果电脑环境使用的程序。代码如下:

import os
from docx import Document
from openpyxl import load_workbook

def info_update(doc, old, new):
    for para in doc.paragraphs:
        for run in para.runs:
            if old in run.text:
                run.text = run.text.replace(old, new)
                
def replace_cell_text_with_format(cell, keyword, replacement):
    paragraphs = cell.paragraphs
    for paragraph in paragraphs:
        for run in paragraph.runs:
            if keyword in run.text:
                new_text = run.text.replace(keyword, replacement)
                run.clear()  # 清除当前文本
                new_run = run._element  # 创建新的run
                new_run.text = new_text  # 设置新文本
                for key in run._r.attrib.keys():  # 复制格式属性
                    if key != 't':
                        new_run.attrib[key] = run._r.attrib[key]
def get_dic():
    workbook = load_workbook('批量替换表.xlsx')
    sht = workbook.active
    dic = {}
    for c1,c2 in zip(sht["A"],sht["B"]):
        if c1.value!= None and c2.value!= None:
            dic[c1.value] = c2.value
    return dic

def word_replace_keywords(file_path, keyword, replacement):
    doc = Document(file_path)
    info_update(doc, keyword, replacement)
    try: 
        for table in doc.tables:
            if not any(cell.text for row in table.rows for cell in row.cells):
                continue  
            for row in table.rows:
                for cell in row.cells:
                    if keyword in cell.text:
                        replace_cell_text_with_format(cell, keyword, replacement)
    except Exception as e:
        print("Error processing table:", e)
            
    doc.save(file_path)

def excel_replace_keywords(file_path, keyword, replacement):
    wb = load_workbook(file_path)
    for sheet_name in wb.sheetnames:
        sheet = wb[sheet_name]
        for row in sheet.iter_rows():
            for cell in row:
                if cell.value and keyword in str(cell.value):
                    cell.value = str(cell.value).replace(keyword, replacement)
    wb.save(file_path)
    wb.close()
    
def get_replaced(dic):    
    for root, filefolder, files in os.walk(os.curdir):
        for file in files:
            if file.endswith("docx"):
                file_path = os.path.join(root, file)
                for key, value in dic.items():
                    word_replace_keywords(file_path, key, value)
            elif file.endswith("xlsx") and os.path.basename(file)!="批量替换表.xlsx":
                file_path = os.path.join(root, file)
                for key, value in dic.items():
                    excel_replace_keywords(file_path, key, value)
def main():
    dic = get_dic()
    get_replaced(dic)
if __name__ == "__main__":
    main()

以上代码的优势在于:速度快,设置好关键字后一键替换,可以在多个环境下使用,相比VBA代码,Python代码的执行速度更快、操作更简单、省时省力。

四、注意事项

1. 运行代码前一定要安装Python3.9及以上版本,同时安装openpyxl和python-docx两个模块。

2. 执行程序前要把doc和xls文件分别转化为docx和xlsx文件,这样更方便替换。

3. 执行前要在程序文件目录下建立一个xlsx文件,命名为"批量替换表.xlsx",在表的A列放上要查找的关键字,B列放要替换的关键字。

4. 如果有问题,可以随时与我联系,也可以通过下面进行提问。文章来源地址https://www.toymoban.com/news/detail-652263.html

到了这里,关于Python批量替换Excel和Word中的关键字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python UI自动化 —— 关键字+excel表格数据驱动

    1. 对selenium进行二次封装,创建的库 2. 准备一个表格文件来写入所有测试用例步骤 3. 对表格内容进行读取,使用映射关系来对用例进行调用执行     4. 执行用例 1. 对selenium进行二次封装,创建的库 2. 创建一个表格,写入测试步骤 将表格放入项目任意路径下,记

    2024年02月09日
    浏览(46)
  • Python 中的==操作符 和 is关键字

    Python是一种功能强大的通用编程语言,提供了各种比较值和对象的方法。其中包括==操作符和is,它们的用途不同,但由于它们有时可以达到相同的目的,所以经常会被混淆。在本文中,我们将深入研究==和is之间的区别,探索它们如何工作以及何时适当地使用它们。

    2024年02月03日
    浏览(58)
  • 【python基础】python中的with关键字及其相关用法

    目录 1.with  2.上下文管理器  3.总结  4.with torch.no_grad()的用法 在Python中, with 是一个,用于处理上下文管理器(context manager)。上下文管理器是一种对象,它定义了在进入和离开某个上下文时应该执行的操作。 with  语句使代码更清晰、更具可读性, 它简化了文

    2024年02月16日
    浏览(53)
  • 【VSCode】设置关键字高亮的插件 | Highlight Word

    本文主要介绍在 VSCode 看代码时,怎样使某个单词高亮显示,主要通过以下三步实现: 安装 highlight-words 插件 配置 highlight-words 插件 设置高亮快捷键F8 工作是嵌入式开发的,代码主要是C/C++的,之前一直用 source insight 4 看代码,最近转到 VSCode ,使用 VSCode 看代码时,发现它居

    2024年02月11日
    浏览(59)
  • 文件按关键字分组-切割-染色-写入excel

            针对下面的文件data.csv,首先根据fid进行排序,然后分组,使相同fid的记录放到同一个excel文件中,并对每列重复的数据元素染上红色。 输出 1. 找到同列重复元素 2. 插入图片 3. 同列相同元素染色 输出

    2024年02月15日
    浏览(44)
  • Rust中的关键字

    严格 as - 强制类型转换,消除特定包含项的 trait 的歧义,或者对 use 和 extern crate 语句中的项重命名 async - 返回一个 Future 而不是阻塞当前线程( 2018版新增) await - 暂停执行直到 Future 的结果就绪( 2018版新增) break - 立刻退出循环 const - 定义常量或不变裸指针(constant raw

    2024年02月07日
    浏览(40)
  • mysql中的关键字

    MySQL是一种流行的开源关系型数据库管理系统,包含许多,这些在MySQL中具有特殊的含义,用于执行各种数据库操作。以下是MySQL中的一些及其用法: ADD:用于向现有表添加一列或多列。 ALTER:用于修改表的结构,例如更改列名、更改列的数据类型、修改索

    2024年02月16日
    浏览(40)
  • MySQL中的COLLATE关键字

    Collation in MySQL refers to the set of rules used to compare and sort characters in a particular character set. It determines how strings are compared and ordered based on their characters’ linguistic and cultural rules. Collation settings affect operations such as sorting, searching, and comparing strings in MySQL queries. In MySQL, collation can be spec

    2024年02月12日
    浏览(52)
  • C#中的ref关键字

    1、传递的是参数的值(数据的副本)而不是原始数据本身。 2、函数内部对值参数的修改不会影响到原始数据。 3、通常用于传递基本数据类型(如整数、浮点数、布尔值)或不可变对象(如字符串、元组)。 4、值参数的传递是一种传值调用(Call by Value)。 示例代码 运行结

    2024年02月05日
    浏览(49)
  • C#中的`out`关键字

    C# 中的 out 是一个用来在方法调用时传递数据的修饰符。它允许你在方法内部创建一个临时的变量,用于接收传递进来的参数值,并在方法执行完毕后,将该变量的值返回给调用方法的对象。out 主要用于那些需要知道方法执行结果的参数上。 在 C# 中,out

    2024年02月22日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包