视频功能演示
背景痛点
前阵子xx公司有一批excel 需要根据关键词筛选出来,并且需要把关键词替换成另外一个词。
但是,问题来了,excel有上千份,如果每一份都要手动搜索和替换,那时间将不复存在!!!!
这里我有一个解决方案:可以指定excel目录, 然后进行批量关键词替换。**
**
功能用法介绍
关注公众号“老罗软件”,回复:“小鱼办公” , 查看软件。
关注公众号“老罗软件”,回复:“小鱼办公” , 查看软件。
功能概述
专门进行excel和word文档的查找和替换, 支持批量文件,一键搜索和替换,还可以指定命中关键词的样式。
首先我们需要选择要查找的文件目录(支持excel和word文档):
然后输入要查找的关键词:
替换的关键词可以不用填, 有替换的需求就填, 如果不填,就只筛选出包含关键词的文档出来。
匹配模式选择 “模糊匹配” 就可以,一般不用改变。
还可以根据你实际的需求,勾选是否区分大小写。
命中的样式设置(选填):
设置好之后, 点击开始替换,就会自动执行,结果文件在原文档目录的out下面:
如果您有疑问可以一起来探讨,功能就介绍到 这里 ,希望能帮助大家,感谢!!!
如果您有疑问可以一起来探讨,功能就介绍到 这里 ,希望能帮助大家,感谢!!!
技术实现原理
软件是基于Python开发的现代化办公自动化软件,主要使用了如下技术架构:
1. PySide6 (Qt6) - 现代化GUI界面框架:
2. springboot: 格式的调整是通过后端java实现的。
- 文件处理:os.walk() - 递归遍历目录结构。
部分代码解析
项目的 开始 按钮,会开启一个QThread线程去处理,首先是获取移除目录, 然后通过os.walk遍历目录获取到所有文件,然后一个一个进行处理,代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
批量查找替换服务类
提供Excel文件中的批量查找替换功能的核心实现
"""
import os
import re
from pathlib import Path
import openpyxl
from openpyxl.styles import Font, PatternFill
from openpyxl.utils import get_column_letter
from api.excel_api import ExcelAPI
from utils.logger import info, error, warning, debug
from utils import FileUtils
class FindReplaceService:
"""批量查找替换服务类"""
def __init__(self):
"""初始化服务"""
self.excel_api = ExcelAPI()
def get_excel_files(self, directory):
"""获取目录下的所有Excel文件"""
return FileUtils.list_files(directory,['.xlsx', '.xls', '.xlsm','.docx', '.doc'])
def find_replace_in_excel(self, output_file , excel_file, find_text, replace_text, match_mode, case_sensitive,
bg_color=None, font_name=None, font_size=None, font_color=None):
"""在Excel文件中查找并替换文本
Args:
excel_file: Excel文件路径
find_text: 要查找的文本
replace_text: 替换的文本
match_mode: 匹配模式('exact', 'fuzzy', 'startswith', 'endswith')
case_sensitive: 是否区分大小写
bg_color: 背景颜色(RGB格式,如'FFFF00'表示黄色)
font_name: 字体名称
font_size: 字体大小
font_color: 字体颜色(RGB格式)
Returns:
tuple: (替换次数, 替换单元格列表)
"""
print(find_text, "," , replace_text,",", match_mode,",", case_sensitive,",", bg_color,",", font_name,",", font_size , " , ",font_color)
self.excel_api.find_replace(excel_file , output_file , {
"find_text":find_text,
"replace_text":replace_text,
"match_mode":match_mode,
"case_sensitive":case_sensitive,
"bg_color":bg_color,
"font_name":font_name,
"font_size":font_size,
"font_color":font_color
})