Excel全能工具箱:读写、预览、合并、拆分、关联、去重、清洗、校验、模板填充、样式、条件格式、公式、图表、透视表、数据分析、差异对比、图片插入、密码保护。典型场景:月度业务报表合并汇总、HR花名册/考勤表关联清洗、运营数据透视分析、绩效数据校验去重、批量生成offer/通知模板、薪酬表加密保护、业务周报图表生成。触发词:Excel、表格、xlsx、csv、电子表格、合并Excel、拆分Excel、Excel图表、数据透视表、Excel公式、条件格式、数据清洗、Excel模板、Excel对比、Excel加密、VLOOKUP、去重、数据校验、统计分析、格式转换、业务报表、花名册、考勤表、绩效数据、运营数据、excel toolbox、spreadsheet、merge excel、split excel、excel chart、pivot table。即使用户没有明说'用Excel工具箱',只要涉及Excel/表格/xlsx/csv文件的操作都应触发。不适用:在线协作编辑(用Google Sheets等在线工具)、纯代码开发、Skill管理。
文档
excel-format-optimizer
试用Excel 格式优化工具:提升字体可读性、统一边框样式、调整列宽行高和缩放比例。当用户提到 Excel 字体太小、阅读体验差、边框太丑、格式需要美化、表格不好看时触发。适用于 Windows 桌面端阅读场景。
它能做什么
Excel 格式优化工具:提升字体可读性、统一边框样式、调整列宽行高和缩放比例。当用户提到 Excel 字体太小、阅读体验差、边框太丑、格式需要美化、表格不好看时触发。适用于 Windows 桌面端阅读场景。
技能文档
Excel 格式优化器
针对已有 Excel 文件进行格式优化,重点解决 字体太小、边框不统一、列宽不合理、无缩放设置 等桌面端阅读体验问题。
适用场景
- 用户收到他人制作的 Excel,字体太小看不清
- 表格边框风格混乱(有的有框有的没框、粗细不一)
- 需要统一字体、字号、列宽、行高
- 需要调整缩放比例和视图设置
前置条件
openpyxl 安装
openpyxl 通常不在默认环境中,需要安装:
# 国内环境 pypi.org 经常超时,直接用清华镜像
cd "C:\Users\17551\.workbuddy\binaries\python\envs\default"
./Scripts/pip.exe install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple --timeout 30
Python 运行时
使用 managed Python(非系统 Python):
C:\Users\17551\.workbuddy\binaries\python\envs\default\Scripts\python.exe
工作流程
第 1 步:诊断现有格式
先读取文件,全面了解当前格式状态,不要跳过这一步直接改:
import openpyxl
wb = openpyxl.load_workbook(path)
for sn in wb.sheetnames:
ws = wb[sn]
# 检查:max_row, max_column, merged_cells
# 检查:column_dimensions(列宽)
# 检查:row_dimensions(行高)
# 检查:每个单元格的 font(name, size, bold, color)
# 检查:每个单元格的 alignment(horizontal, vertical, wrap_text)
# 检查:fill(start_color, patternType)
# 检查:border(left/right/top/bottom 的 style)
# 检查:sheet_view.zoomScale, freeze_panes
关键检查项:
- 字体大小分布(找出最小和最大字号)
- 字体是否混用(如 Aptos + 宋体)
- 哪些列没有设置宽度(会显示默认窄列)
- 边框风格是否统一(thin/medium 混用、部分单元格无框)
- 是否有合并单元格(修改时需特别注意)
- 是否有公式(必须保留,不能误删)
第 2 步:制定优化方案
根据诊断结果,确定优化策略。以下是推荐默认值:
字体优化
| 原字号 | 新字号 | 说明 |
|---|---|---|
| >= 18 | 22 | 主标题 |
| >= 16 | 18 | 小标题/总分 |
| >= 10 | 12 | 正文 |
| >= 9 | 11 | 脚注 |
| < 9 | 12 | 异常小字 |
- Windows 环境:统一字体为
微软雅黑(渲染清晰、兼容性好) - Mac 环境:统一字体为
PingFang SC
列宽优化
- 根据 sheet 内容和列数,为每一列设置合理宽度
- 必须检查:有些列在原文件中没有设置
column_dimensions,需要手动补齐 - 正文列宽度建议 20-30,长文本列 50-100,编号/序号列 8-12
行高优化
- 按原行高 × 1.25 放大(适配更大字号)
- 如原行高未设置(None),给默认值 20
缩放比例
- 设为 110%(
sheet_view.zoomScale = 110)
冻结窗格(谨慎使用)
- 重要教训:冻结窗格可能导致用户打开文件后体验异常(冻结行数过多占屏)
- 如需设置,只冻结表头行(1-2 行),不要冻结多行
- 建议默认不设置,除非用户明确要求
第 3 步:执行优化
import openpyxl
from openpyxl.styles import Font, Alignment, Border, Side, PatternFill
from copy import copy
wb = openpyxl.load_workbook(src)
TARGET_FONT = '微软雅黑' # Windows
def new_font_size(old_size):
if old_size >= 18:
return 22
elif old_size >= 16:
return 18
elif old_size >= 10:
return 12
elif old_size >= 9:
return 11
else:
return 12
for sn in wb.sheetnames:
ws = wb[sn]
# 1. 遍历所有单元格,更新字体和字号
for row in ws.iter_rows(min_row=1, max_row=ws.max_row, max_col=ws.max_column):
for cell in row:
f = cell.font
cell.font = Font(
name=TARGET_FONT,
size=new_font_size(f.size),
bold=f.bold,
italic=f.italic,
color=f.color.rgb if f.color else 'FF222222',
underline=f.underline,
strike=f.strike,
vertAlign=f.vertAlign
)
# 保留原有对齐方式,但确保 vertical 和 wrap_text 有值
a = cell.alignment
cell.alignment = Alignment(
horizontal=a.horizontal,
vertical=a.vertical if a.vertical else 'center',
wrap_text=a.wrap_text if a.wrap_text is not None else True,
text_rotation=a.text_rotation,
indent=a.indent,
shrink_to_fit=a.shrink_to_fit
)
# 2. 设置列宽(每个 sheet 不同)
col_widths = {...} # 根据诊断结果设置
for col, width in col_widths.items():
ws.column_dimensions[col].width = width
# 3. 放大行高
for row_num in range(1, ws.max_row + 1):
rd = ws.row_dimensions.get(row_num)
if rd and rd.height:
ws.row_dimensions[row_num].height = round(rd.height * 1.25, 1)
# 4. 设置缩放
ws.sheet_view.zoomScale = 110
ws.sheet_view.zoomScaleNormal = 110
wb.save(dst)
第 4 步:边框美化(按需)
当用户反馈"边框太丑"时,对特定区域进行边框统一:
thin = Side(style='thin', color='FFD9D9D9') # 浅灰细线
medium = Side(style='medium', color='FFAAAAAA') # 中灰粗线
header_fill = PatternFill(start_color='FFF2F2F2', end_color='FFF2F2F2', patternType='solid')
# 遍历目标区域,统一边框
for row in ws.iter_rows(min_row=start, max_row=end, min_col=1, max_col=max_col):
for cell in row:
top, bottom, left, right = thin, thin, thin, thin
# 区块标题行:加粗上下边框 + 浅灰底色
if cell.row in header_rows:
top, bottom = medium, medium
cell.fill = header_fill
# 最后行:底部加粗
if cell.row == last_row:
bottom = medium
cell.border = Border(left=left, right=right, top=top, bottom=bottom)
边框美化原则:
- 使用浅灰色(#D9D9D9 / #AAAAAA)代替默认黑色,视觉更柔和
- 数据行统一细边框,区块标题用粗边框分隔
- 合并单元格区域加浅灰底色突出分区
第 5 步:验证
保存后必须验证:
wb2 = openpyxl.load_workbook(dst)
for sn in wb2.sheetnames:
ws = wb2[sn]
# 1. 验证公式未丢失
for row in ws.iter_rows():
for cell in row:
if cell.value and isinstance(cell.value, str) and cell.value.startswith('='):
print(f'{cell.coordinate}: {cell.value}')
# 2. 验证合并单元格
print(f'Merged: {list(ws.merged_cells.ranges)}')
# 3. 验证字体
print(f'Font: {ws["A1"].font.name}, sz={ws["A1"].font.size}')
# 4. 验证缩放
print(f'Zoom: {ws.sheet_view.zoomScale}')
踩坑记录与避坑指南
坑 1:pypi.org 超时
现象:pip install openpyxl 超时失败,报 ReadTimeoutError 或 SSLEOFError
原因:国内网络访问 pypi.org 不稳定
解决:使用清华镜像
./Scripts/pip.exe install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple --timeout 30
坑 2:文件被占用导致 PermissionError
现象:wb.save(path) 报 PermissionError: [Errno 13] Permission denied
原因:文件正在被腾讯文档编辑器或 Excel 打开预览,文件锁未释放
解决:另存为新文件名(如 _v2.xlsx),不要尝试关闭用户的编辑器
dst = path.replace('.xlsx', '_v2.xlsx')
wb.save(dst)
坑 3:冻结窗格导致体验问题
现象:设置 freeze_panes 后,用户打开文件反馈"出现冻结情况"
原因:冻结行数过多(如冻结了 8 行含标题+信息行+表头),占据大量屏幕空间
解决:
- 默认不设置冻结窗格
- 如用户要求,只冻结 1-2 行表头
- 用户反馈后立即移除:
ws.freeze_panes = None
坑 4:openpyxl 不保留公式计算结果
现象:用 openpyxl 保存后,公式单元格可能显示为 0 或空白
原因:openpyxl 保存公式为字符串,不计算结果。需要 Excel/WPS 打开后自动重算
解决:
- 不要用
data_only=True加载(会把公式替换为值并永久丢失公式) - 保存后提醒用户用 Excel/WPS 打开即可自动重算
- 如需验证公式值,使用 xlsx skill 中的
scripts/recalc.py(需要 LibreOffice)
坑 5:字体名混用
现象:原文件中不同单元格使用不同字体(如 Aptos + 宋体),统一后仍有残留
解决:遍历所有单元格强制设置 name=TARGET_FONT,不要只改部分
坑 6:部分列没有设置宽度
现象:优化后发现某些列仍然很窄
原因:原文件中部分列的 column_dimensions 未设置,openpyxl 不会自动补齐
解决:在诊断阶段检查所有列是否有宽度设置,对缺失的列手动赋值
输出文件命名
- 优化版:
{原文件名}_优化版.xlsx - 如遇文件锁:
{原文件名}_优化版_v2.xlsx(递增版本号)
优化检查清单
- 所有单元格字体已统一为目标字体
- 正文字号 >= 12pt
- 所有列都有明确的宽度设置
- 行高已按比例放大
- 缩放比例已设置(110%)
- 公式全部保留(未丢失)
- 合并单元格未受损
- 边框风格统一(无残留旧样式)
- 文件可正常打开(无损坏)
相关技能
优化 EPUB 文件的阅读体验:重写 CSS、统一中英文双语段落排版、强制字体(如 LXGW WenKai)、美化代码块与表格、解决阅读器白底白字问题。当用户需要美化/优化 EPUB 排版、修复 EPUB 显示异常、调整 EPUB 字体或颜色时调用。
从自然语言描述生成Excel公式,诊断表格错误,支持VLOOKUP、条件求和等常用函数。Use when 需要文本翻译、多语言转换、本地化处理时使用。不适用于专业医学法律翻译认证。适用于独立开发者、企业团队和自动化工作流场景。支持中文交互,无需复杂配置即开即用。输出结果可直接使用,减少二次加工成本。
Convert Excel (.xlsx) sign-in sheets and rosters to print-ready A4 PDFs with Chinese font support. Use when the user needs to (1) convert an Excel table/rost...
Excel 工具(免费版)面向个人用户与独立开发者,提供 Excel 文件的基础处理能力:读取、写入、数据清洗、公式计算与基础统计。通过 openpyxl 与 pandas 等标准库操作 xlsx 文件,无需安装 Microsoft Excel。Use when 需要数据分析、报表生成、统计洞察、数据可视化时使用。不适用于实时流数据处理.
结构化整理层级型 Excel 表格(.xlsx),处理父子层级关系、向下填充、分组首行显示、筛选优化。当用户上传 Excel 文件并要求「结构化整理」「填充数据」「整理表格」「整理测试用例」「清理表格格式」时使用。