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

news2025/6/4 10:49:35

摘要

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


架构流程图

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

工具脚本源码

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. 敏感信息脱敏后处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2396458.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式——模版方法设计模式(行为型)

摘要 模版方法设计模式是一种行为型设计模式,定义了算法的步骤顺序和整体结构,将某些步骤的具体实现延迟到子类中。它通过抽象类定义模板方法,子类实现抽象步骤,实现代码复用和算法流程控制。该模式适用于有固定流程但部分步骤可…

Deepin 20.9社区版安装Docker

个人博客地址:Deepin 20.9社区版安装Docker | 一张假钞的真实世界 注意事项 Deepin 20.9 社区版安装 Docker 需要注意两点: 因为某些原因,Docker 官方源基本不可用,所以需要使用镜像源进行安装。当然也可以用安装包直接安装&am…

纯数据挖掘也能发Microbiome?

抗生素滥用导致多重耐药微生物在全球蔓延,但新型抗生素的研发进展缓慢,亟需找到替代抗生素的新型防御策略。抗菌肽(AMPs)作为天然防御分子,具有低耐药潜力和广谱活性。德国小蠊(Blattella germanica&#x…

2025年05月30日Github流行趋势

项目名称:agenticSeek 项目地址url:https://github.com/Fosowl/agenticSeek项目语言:Python历史star数:13040今日star数:1864项目维护者:Fosowl, steveh8758, klimentij, ganeshnikhil, apps/copilot-pull-…

跨平台猫咪桌宠 BongoCat v0.4.0 绿色版

—————【下 载 地 址】——————— 【​本章下载一】:https://pan.xunlei.com/s/VORWH1a7lPhdwvon6DJgKvrNA1?pwdcw2h# 【​本章下载二】:https://pan.quark.cn/s/c3ac86f4e296 【百款黑科技】:https://ucnygalh6wle.feishu.cn/wiki/…

Dify案例实战之智能体应用构建(一)

一、部署dify Windows安装Docker部署dify,接入阿里云api-key进行rag测试-CSDN博客 可以参考我的前面文章,创建一个本地dify或者直接dify官网使用一样的(dify官网需要科学上网) 二、Dify案例实战之智能体 2.1 智能面试官 需求;…

从模式到架构:Java 工厂模式的设计哲学与工程化实践

一、工厂模式概述 (一)定义与核心思想 工厂模式(Factory Pattern)是软件开发中常用的创建型设计模式,其核心思想是将对象的创建过程封装起来,通过工厂类来统一管理对象的创建逻辑。这种模式分离了对象的创…

docker问题记录

docker pull镜像: 即使配置了镜像源也还是走的国外的镜像源: 解决办法:在pull镜像的时候强制走自己的镜像 比如:拉取rabbitmq,强制使用"https://docker.m.daocloud.io"这个镜像 docker pull docker.m.da…

设计模式——代理设计模式(结构型)

摘要 本文详细介绍了代理设计模式,包括其定义、结构组成、实现方式、适用场景及实战示例。代理设计模式是一种结构型设计模式,通过代理对象控制对目标对象的访问,可增强功能或延迟加载等。文中通过类图、时序图、静态代理、JDK动态代理、CGL…

从“固定“到“流动“:移动充电如何重塑用户体验?

在传统充电模式中,"固定"不仅是技术的特征,更成为用户行为的枷锁——人们需要规划行程、寻找插座、等待电量填满,这种被动适配正在被移动充电技术颠覆。当充电设备从墙面解放,化身可携带的能源胶囊,甚至嵌入…

玩客云 OEC/OECT 笔记(1) 拆机刷入Armbian固件

目录 玩客云 OEC/OECT 笔记(1) 拆机刷入Armbian固件玩客云 OEC/OECT 笔记(2) 运行RKNN程序 外观 内部 PCB正面 PCB背面 PCB背面 RK3566 1Gbps PHY 配置 OEC 和 OECT(OEC-turbo) 都是基于瑞芯微 RK3566/RK3568 的网络盒子, 没有HDMI输入输出. 硬件上 OEC 和 OECT…

GIS数据类型综合解析

GIS数据类型综合解析 目录 GIS数据类型综合解析1. 总体介绍2. GIS数据类型分类与对比2.1 主要数据类型对比表 3. 详细解析与扩展内容3.1 矢量数据(Vector Data)3.2 栅格数据(Raster Data)3.3 属性数据(Attribute Data&…

Prometheus + Grafana 监控常用服务

一、引言 Prometheus监控常见服务的原理主要包括服务暴露指标和Prometheus抓取指标。一方面,被监控服务通过自身提供的监控接口或借助Exporter将服务的性能指标等数据以HTTP协议的方式暴露出来;另一方面,Prometheus根据配置好的采集任务&…

6月1日星期日今日早报简报微语报早读

6月1日星期日,农历五月初六,早报#微语早读。 1、10个省份城镇化率超70%,广东城镇人口超9700万; 2、长沙居民起诉太平财险不赔“新冠险”,立案878天后获胜判; 3、海口:全市范围内禁止投放互联…

如何在 Ubuntu 24.04 服务器上安装 Apache Solr

Apache Solr 是一个免费、开源的搜索平台,广泛应用于实时索引。其强大的可扩展性和容错能力使其在高流量互联网场景下表现优异。 Solr 基于 Java 开发,提供了分布式索引、复制、负载均衡及自动故障转移和恢复等功能。 本教程将指导您如何在 Ubuntu 24.…

unity编辑器扩展dll形式展示

1.背景:最近搞工程迁移发现一旦c#报错就会导致编辑器菜单没法使用,做了一些尝试发现使用dll的方式会是不错的选择。当然有些工具还是建议用外部的c#工程来写比如winform. 2.遇到的问题:我记得之前2017年左右的时候做一个unity的dll工程并不需…

vscode中launch.json、tasks.json的作用及实例

文章目录 launch.json是什么作用多环境调试简单实例进阶使用核心配置项解析调试第三方程序 launch.json是什么 顾名思义:它是在.vscode文件夹下的launch.json,所以是vscode启动调试的配置文件。总结:通过定义调试参数、环境变量和启动方式&a…

VScode编译调试debug,gpu的cuda程序,Nsight

进行下面操作的前提是,我们的环境已经能跑简单的CUDA程序了。 一、安装Nsight 二、创建launch.json文件 {"version": "0.2.0","configurations": [{"name": "CUDA C: Launch","type": "cuda-gdb…

中企出海大会|打造全球化云计算一张网,云网络助力中企出海和AI创新

全球化是阿里云的长期战略,未来阿里云将持续加大云和 AI 基础设施建设投入。首先是加速打造全球化的云计算网络,一张具备 AI技术服务能力和全球竞争力的云计算网络是阿里云的长期目标。 —— 阿里巴巴集团 CEO、阿里云智能集团董事长兼 CEO 吴泳铭 5 月 …

防范DDoS攻击,服务器稳定性崩溃的根源与高效防御对策

DDoS攻击(分布式拒绝服务攻击)已成为危害服务器稳定性和业务连续性的主要因素之一。本文将深入探讨为什么服务器一遇到DDoS攻击就崩溃,以及如何从根本上实现有效防御和应对这一威胁,帮助企业提升网络安全水平。 具体内容如下&…