Excel处理,看似简单,但坑多到你怀疑人生。
我见过太多人因为一个小问题卡了半天:文件打不开、日期变数字、数据莫名其妙丢失……
今天把最常见的5个坑全部列出来,帮你绕过去。
👇 看完本文你能学到什么?
1. 识别5个最常见的Excel处理陷阱
2. 学会对应的解决方案
3. 避免重复踩坑浪费时间
💡 文末有彩蛋:附赠避坑检查清单,收藏备用
坑1:文件被占用,打不开
报错:
PermissionError: [Errno 13] Permission denied: '成绩表.xlsx'
原因:Excel文件正在被Excel软件打开
解决:
• 关闭Excel软件
• 或者用只读模式打开:
wb = openpyxl.load_workbook('文件.xlsx', read_only=True)坑2:日期变成了数字
现象:2024/1/1 变成了 45292
原因:Excel内部用数字存储日期
解决:
import pandas as pd # 读取时指定日期列 df = pd.read_excel('数据.xlsx', parse_dates=['日期']) # 或者手动转换 df['日期'] = pd.to_datetime(df['日期'])坑3:中文字体显示异常
现象:写入的中文变成方块或问号
原因:字体不支持中文
解决:
from openpyxl.styles import Font # 设置支持中文的字体 cell.font = Font(name='微软雅黑')
坑4:保存后文件损坏
原因:保存时文件正在被其他程序使用
解决:
• 先关闭所有打开该文件的程序
• 保存前检查文件是否被锁定:
import os if not os.access('文件.xlsx', os.W_OK): print("文件不可写,可能被占用")坑5:写入数据被截断
现象:长文本只显示了一部分
原因:单元格列宽不够
解决:
from openpyxl.utils import get_column_letter # 自动调整列宽 for col in ws.columns: max_length = 0 column = get_column_letter(col[0].column) for cell in col: if len(str(cell.value)) > max_length: max_length = len(str(cell.value)) adjusted_width = (max_length + 2) * 1.2 ws.column_dimensions[column].width = adjusted_width
避坑检查清单
✓ 文件保存前确保没有其他程序打开
✓ 中文路径建议改用英文或拼音
✓ 日期列读取后用pd.to_datetime转换
✓ 大文件处理前先备份
✓ 写入数据前检查数据类型
今日小练习
1. 用try-except包裹你的文件读写代码,捕获PermissionError
2. 创建一个日期转换函数,统一处理日期格式
3. 写一个检查文件是否可写的函数
有踩过坑的朋友,欢迎评论区分享你的经历!
📌 往期精选:
👉 pandas基础:用两行代码读取Excel数据
🔔 关注公众号,回复「避坑」领取:避坑学习手册
(点击公众号底部菜单 → 领取资料)