高效Excel数据净化工具:一键清除不可见字符与格式残留

摘要

本文将分享一款基于Python的Excel数据净化工具,用于自动清除给定的Excel文档中指定工作表中的不可见字符、批注、单元格样式等冗余数据。脚本支持进度可视化展示,保留核心数据处理逻辑的同时确保文件格式规整,特别适用于需要规范数据格式的企业级应用场景。


架构流程图

异常处理 可视化组件 核心处理模块 存在 不存在 循环处理 完成所有行 输出错误信息 更新进度条 清理条件格式 清除不可见字符 移除批注 重置字体样式 清除填充颜色 用户输入 输入参数 加载Excel文件 工作表存在性检查 初始化清理 逐行处理单元格 保存新文件


工具脚本源码

python 复制代码
import openpyxl
from openpyxl.styles import NamedStyle, Font, Border
from openpyxl.formatting import Rule
import re
from tqdm import tqdm  # 新增进度条库
from openpyxl.styles import PatternFill

def clean_invisible_chars(text):
    """清除字符串中的不可见字符"""
    if not isinstance(text, str):
        return text
    # 清除控制字符(ASCII 0-31,除了\t\n\r)
    return re.sub(r'[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]', '', text)

def clear_all_and_save(input_file, output_file, sheet_name):
    """
    清除工作表中的:
    1. 不可见字符
    2. 批注
    3. 单元格样式
    """

    # 已清理的列表
    cleared_set = set()
    
    # 加载工作簿
    wb = openpyxl.load_workbook(input_file)
    # 创建无样式对象
    no_style = NamedStyle(name="Normal")
    # 创建无填充对象
    no_fill = PatternFill(fill_type=None)
    
    
    
    # 检查工作表是否存在
    if sheet_name not in wb.sheetnames:
        print(f"错误: 工作表 '{sheet_name}' 不存在。")
        print(f"可用工作表列表: {', '.join(wb.sheetnames)}")
        return
    
    # 获取工作表
    ws = wb[sheet_name]
    # 获取总行数用于进度条
    total_rows = ws.max_row
    
    
    
    first_init = True
    
    # 使用tqdm显示进度条
    for row in tqdm(ws.iter_rows(), total=total_rows, desc="处理进度"):

        if first_init == True:
            print(f"初始化完成,开始清理数据...")
            
            # 彻底清除所有条件格式和样式
            ws.conditional_formatting = []
            cleared_set.add('条件格式填充色')
            # cleared_set.add('单元格默认样式')
            print(f"✔ 已彻底清理 工作表:{sheet_name} 的所有样式设置, 开始单元格处理...")
                
            first_init = False
        
        for cell in row:
            # 彻底清除单元格所有样式
            cell.fill = PatternFill(fill_type=None)
            cell.font = Font(name='Calibri', size=11, bold=False, italic=False)
            cell.border = Border()
            cell.number_format = 'General'
            # 清除不可见字符
            if cell.value and isinstance(cell.value, str):
                cell.value = clean_invisible_chars(cell.value)
                cleared_set.add('不可见字符')
                
            # 清除批注
            if cell.comment:
                cell.comment = None
                cleared_set.add('批注')
                
            # 清除样式
            cell.style = no_style
            cleared_set.add('单元格样式')
            
            # 清除单元格填充颜色
            if cell.fill:
                cell.fill = no_fill
                cleared_set.add('单元格填充色')
    
    # 保存工作簿到新的文件
    wb.save(output_file)
    
    # cleared_text = ", ".join(cleared_set)
    cleared_text = "\n".join(f"  ✔ 清除-{item}" for item in cleared_set)
    # print(f"已清理[{cleared_text}],并保存到 {output_file}")
    print("已完成:\n"+cleared_text+f"\n并保存到 {output_file}")

# 使用示例
input_excel_file = r'测试-脱敏结果.xlsx'  # 输入Excel文件路径
output_excel_file = r'清除样式_测试-脱敏结果.xlsx'  # 输出Excel文件路径
sheet_to_clean = 'PB' # 'Sheet1'  # 要清理的工作表名称

print(f"初始化中...")
print(f"输入文件: {input_excel_file}")
print(f"输出文件: {output_excel_file}")
print(f"目标工作表: {sheet_to_clean}")
try:
    clear_all_and_save(input_excel_file, output_excel_file, sheet_to_clean)
except Exception as e:
    print(f"处理过程中发生错误: {str(e)}")

功能特性说明

1. 三重数据净化

  • 隐形字符清除:正则表达式过滤ASCII 0-31控制字符
  • 格式重置:统一字体、边框、填充样式为默认值
  • 元数据清理:移除单元格批注及条件格式

2. 可视化进度提示

采用tqdm库实现:

  • 实时处理进度条
  • 预估剩余时间
  • 已完成项目统计

3. 安全防护机制

  • 工作表存在性校验
  • 异常捕获与友好提示
  • 输出文件独立保存

典型应用场景

  1. 数据迁移前的格式标准化
  2. 第三方数据接入清洗
  3. 报表自动化生成预处理
  4. 敏感信息脱敏后处理
相关推荐
骚戴1 分钟前
大语言模型(LLM)进阶:从闭源大模型 API 到开源大模型本地部署,四种接入路径全解析
java·人工智能·python·语言模型·自然语言处理·llm·开源大模型
柒壹漆2 分钟前
用Python制作一个USB Hid设备数据收发测试工具
开发语言·git·python
东哥很忙XH13 分钟前
python使用PyQt5开发桌面端串口通信
开发语言·驱动开发·python·qt
Dxy123931021626 分钟前
Python的正则表达式入门:从小白到能手
服务器·python·正则表达式
艾上编程34 分钟前
第三章——爬虫工具场景之Python爬虫实战:行业资讯爬取与存储,抢占信息先机
开发语言·爬虫·python
Pyeako35 分钟前
网络爬虫相关操作--selenium库(超详细版)
爬虫·python·selenium
dagouaofei38 分钟前
全面整理6款文档生成PPT工具,PDF转PPT不再难
python·pdf·powerpoint
β添砖java41 分钟前
python第一阶段第10章
开发语言·python
伊玛目的门徒1 小时前
HTTP SSE 流式响应处理:调用腾讯 智能应用开发平台ADP智能体的 API
python·网络协议·http·腾讯智能体·adp·智能应用开发平台
倔强的小石头_1 小时前
Python 从入门到实战(八):类(面向对象的 “对象模板”)
服务器·开发语言·python