Excel打印版格式化

👤 顾冉 ✓ 已认证 📦 v1.0.3 ⭐ 4.5 ⬇️ 79 下载
📄 办公效率 免费

📖 技能介绍


name: audit-sheet-print-fit description: "将含行标签的 Excel 工作底稿(如审计底稿)一键处理为打印版:标签行合并贯通、删除标签下方说明行/空行(保留数据行)、自适应列宽/行高、A4 fitToPage 打印设置、统一字体颜色,可选脱敏客户/单位名称。" agent_created: true tags: ["excel", "xlsx", "打印", "底稿", "审计", "openpyxl"]


底稿打印版处理(audit-sheet-print-fit)

概述

audit-sheet-print-fit 用于把多 sheet 的 Excel 工作底稿整理成干净、可直接打印的版本。

核心能力:

  1. 标签行合并贯通:将指定标签(默认「审计结论」/「审核结论」)所在行的纵向/横向合并解除, 把标签右侧的内容文字在单行内横向贯通合并到本表最后一列,并统一设为左对齐。
  2. 清理标签行并保留数据边界内所有行
  3. 先合并结论延续行:若结论文字跨多行写在 A 列为空的后续行中,自动合并到标签行;
  4. 再清空标签行(结论行)中标签右侧的 0 值、公式,只保留真正的结论文字;
  5. 以 "合计"/"小计"/"总计" 行作为数据边界:
    • 若结论在数据上方(标签行下方存在合计行),保留 [标签行+1, 合计行] 之间的所有行 (含 A 列为空、全为 0/公式的数据行),仅删除合计行下方的说明行、空行、孤立全零行;
    • 若结论在底稿最下方(合计行在标签行上方或不存在),删除结论下方的所有行;
  6. 删除范围包含 "审计要点"、"审核要点"、"编制说明"、"注:"、"备注" 等说明行;
  7. 找不到合计行时,按结论下方是否为空/说明行决定:空/说明行删除,遇到非空数据行则保留其后所有行。
  8. 也可通过 --mode clear 仅清空说明行内容、保留空行。
  9. 自适应打印版式所有 sheet 都会重新计算列宽与行高;每个 sheet 设置 A4、 fitToPage=1×1、页边距 0.4″、横/纵向自动、显式打印区域。
  10. 统一字体样式:全文字体颜色设为黑色、取消加粗、清除单元格底色, 保留字号、字体名、斜体等不变。
  11. 可选脱敏:表头中 单位名称:...被审计单位:...客户名称:... 等标签后的 具体名称替换为 [客户名称],避免输出文件泄露客户/被审计单位信息;默认保留原名称, 需要脱敏时请使用 --redact

核心实现位于 scripts/process_audit_sheet.py(基于 openpyxl)。


适用场景

当用户提出以下任一类请求时启用本技能:

  • "把这份底稿做成打印版 / 打印出来"
  • "标签的两行合并成一行,删掉标签下面的所有内容"
  • "删掉标签下面的明细、审计要点/审核要点,只保留标签行"
  • "标签文字贯通合并,整个表自适应打印"
  • 处理 .xlsx 底稿并要求「只调格式、别改字体」或「做成标准打印版」

快速开始

环境要求

  • Python 3.x
  • openpyxl
pip install openpyxl

基本用法

脚本路径:scripts/process_audit_sheet.py

# 默认:匹配「审计结论」或「审核结论」,删除标签下方整行,输出 <原名>_打印版.xlsx
python scripts/process_audit_sheet.py <输入.xlsx>

# 指定输出路径
python scripts/process_audit_sheet.py <输入.xlsx> -o <输出.xlsx>

# 自定义标签关键词(多个用逗号分隔)
python scripts/process_audit_sheet.py <输入.xlsx> -o <输出.xlsx> --keyword "审计结论,审核结论,审计说明"

# 仅清空下方内容、保留空行
python scripts/process_audit_sheet.py <输入.xlsx> -o <输出.xlsx> --mode clear

# 以标准版为参照,逐 cell 套用边框/对齐格式(不碰字体)
python scripts/process_audit_sheet.py <输入.xlsx> -o <输出.xlsx> --reference <标准版.xlsx>

# 输出文件脱敏单位/客户名称(默认保留原名称)
python scripts/process_audit_sheet.py <输入.xlsx> -o <输出.xlsx> --redact

注意:输入必须是 .xlsx.xls 需先转换为 .xlsx


参数说明

参数 必填 默认值 说明
input - 输入.xlsx 路径(Windows 建议用 C:/...C:\\...
-o, --output <原名>_打印版.xlsx 输出路径,不会覆盖原文件
--mode delete delete=删除标签下方整行;clear=仅清空内容保留空行
--keyword 审计结论,审核结论 匹配的标签关键词,可用逗号分隔多个
--reference - 标准版.xlsx 路径,以之逐 cell 套用边框/对齐格式
--redact / --no-redact 关闭 是否脱敏表头中的单位/客户名称(默认保留原名称)

处理流程

  1. 加载工作簿:使用 openpyxl 打开输入 .xlsx,原文件只读不写。
  2. 脱敏(可选):对全表单元格扫描,将匹配 单位名称:...被审计单位:...客户名称:...委托单位:...受托单位:...编制单位:...客户:... 等模式后的具体名称替换为 [客户名称], 保留标签本身。默认不开启,可通过 --redact 开启。
  3. 定位标签:找到含任一 --keyword 关键词的单元格(行 R,列不固定)。若命中的单元格属于合并区域,以该合并区域的左上角作为标签位置。默认关键词为 审计结论审核结论,可覆盖 "审计要点"、"审核要点" 等标签所在的同类底稿。
  4. 记录被删内容坐标:删除前先收集 R+1 及以下非空单元格的坐标, 处理后在摘要中打印数量与坐标,不输出单元格值。
  5. 解除 R 行及以下合并并保留表格线:解除标签纵向合并、内容文字横向两行合并、明细区合并; 对原合并区域内的所有单元格继承合并区已有的边框样式,避免解除合并后出现表格线缺失。 R 以上的合并不动。
  6. 合并结论延续行、折叠标签纵向合并、清理标签行并删除/清空标签下方说明行/空行
  7. 若标签本身跨行合并(如 A7:A8),先解除合并并把整个合并区域内的结论文字收集到标签行,再删除被折叠的下方行;
  8. 合并结论延续行:识别紧跟标签区域、A 列为空或文字且仅含文字的行,将其文本合并到标签行;A 列出现序号即视为数据行,结束识别
  9. 多段结论(如标签跨 A8:A10、文字在 B8/B9/B10)会被合并为一段;
  10. 清理标签行:保留标签与结论文字,清空标签右侧所有 0 值、公式及其他非文字内容;
  11. 确定数据边界:
    • 先向下找最近的 "合计"/"小计"/"总计" 行;若找到且位于标签行下方,则结论在数据上方,保留标签行到合计行之间的所有行,删除合计行下方的空行/说明行;
    • 若未向下找到合计行,则向上查找;若找到且位于标签行上方,或完全找不到合计行且结论下方只有空行/说明行,则结论在底稿最下方,删除结论下方所有行;
    • 若完全找不到合计行但结论下方出现非空数据行,则视为结论在数据上方,保留其后所有行;
  12. 删除/清空说明行:删除全局 "审计要点"/"审核要点" 行,以及边界外的空行、说明行、孤立全零行;
  13. --mode clear 时仅清空说明行内容。
  14. 内容文字贯通合并并保留合并区边框:在 R 行上将内容文字单元格横向合并到工作表实际使用的最后一列(含表头/边框的最右非空列),并统一设为左对齐; 合并前取合并区所有单元格边框的并集并应用到左上角,确保合并后的结论单元格四边边框完整。 若标签格只含关键词而无内容,则从标签右侧第一列开始保留空合并区域。
  15. 自适应列宽
  16. 普通单元格按单列最大内容估算;数值按千分位+两位小数格式化后估算, 避免实际打印时出现 # 号截断;
  17. 横向合并区左上角文字参与「合并区总宽度」计算,确保合并列总宽足够, 避免贯通文字被截断;
  18. 列宽上限 20、下限 10,CJK 字符系数 2.0、左右留白 3。
  19. 所有 sheet 都会重新计算列宽,不仅是含标签的 sheet,避免明细表因原始列宽过窄而显示 # 号。
  20. 自适应行高:清除固定行高;对横向合并单元格估算折行行数并设置最小行高, 必要时补充 wrap_text,避免长文本被截断。
  21. 统一字体样式:全文字体颜色黑色、取消加粗、清除底色,保留字号/字体名/斜体。

    小葱技能站7w4.net每天更新,海量AI技能等你发现。

  22. 打印版式设置:A4(paperSize=9)、fitToWidth=1fitToHeight=1fitToPage=True;页边距四边 0.4″、页眉页脚 0.5″,通过新建 PageMargins 对象整体赋值以覆盖原模板值; 横/纵向按内容总宽度自动选择;显式打印区域以最终内容边界计算,避免多出一行空白。
  23. 清理与保存:清理 delete_rows 遗留的行维度条目,保存到输出文件。

隐私与安全

强制约束

绝对禁止在任何输出(包括对话回复、脚本摘要、日志、错误提示、文件名建议等)中 出现以下信息:

  • 公司/企业/客户全称
  • 组织机构名称
  • 被审计单位名称
  • 任何可能识别具体实体的名称

推荐做法

处理时如需引用文件或内容,仅使用:

  • 文件名(不含完整路径中的用户名/公司信息)
  • 单元格坐标(如 B24
  • Sheet 名称
  • 被审计单位客户 等泛称代替具体名称

脚本输出设计

process_audit_sheet.py 的摘要仅输出 sheet 名称、标签是否命中、贯通合并状态、 删除行数以及被删非空单元格的坐标,不输出单元格内容值,确保不泄露数据。

输入 vs 输出

  • 输入文件:永远不被修改,保留完整原始数据。
  • 输出文件:默认保留表头单位/客户名称;如需脱敏,请加 --redact

关键假设与限制

项目 说明
输入格式 仅支持.xlsx,不支持 .xls
标签位置 关键词可出现在任意列,不一定在 A 列;默认同时识别「审计结论」「审核结论」;若标签本身纵向合并,会被折叠为单行
标签行及下方 先折叠标签纵向合并、合并结论延续行(A 列序号视为数据行,结束识别),再清理标签行右侧 0 值/公式;以标签下方最近的 "合计"/"小计"/"总计" 行为数据边界:结论在数据上方时保留 [标签行+1, 合计行] 内所有行(含 A 列为空、全 0 行),删除合计行下方说明行/空行;结论在底稿最下方时删除结论下方所有行;无合计行时按下方是否为空/说明行决定
内容贯通列 贯通到工作表实际使用的最后一列(最右非空/有边框列),不再是固定的 ws.max_column
列宽范围 min_width=10max_width=20
横/纵向阈值 内容总宽度 > 53 时切换为横向(A4 竖版可打印宽约 7.47″ ≈ 53 字符)
字体处理 仅改颜色/加粗/底色,不改字号、字体名、斜体
标准版参照 --reference 只复制边框/对齐,不复制字体

验证清单

处理完成后建议核对:

  • [ ] 含匹配标签的 sheet:结论延续行已合并到标签行;标签行本身右侧的 0 值/公式已清空(只保留标签和结论文字);结论在数据上方时,[标签行+1, 合计行] 数据边界内所有行(含 A 列为空、全 0 行)均保留;结论在底稿最下方时,结论下方无残留内容;标签与数据之间的完全空行及边界下方的说明行/空行/孤立全零行已清理。
  • [ ] 内容文字已横向贯通到实际最右使用列,且对齐方式为左对齐;标签本身不再跨行合并。
  • [ ] 打印区域 print_area 与最终 max_row 一致,无多余空白行;fitToWidth==1fitToHeight==1、四边页边距 0.4″、页眉页脚 0.5″。
  • [ ] 横向合并区文字(如表头)未被截断,金额/数字列不出现 #,行高能完整显示折行内容。
  • [ ] 字体颜色为黑色、加粗已取消、单元格底色已清除。
  • [ ] 每个 sheet 的 page_setup.orientationpaperSize==9sheet_properties.pageSetUpPr.fitToPage==True、页边距 0.4 正确。
  • [ ] 文件可正常用 Excel/WPS 打开,无合并失效或结构损坏。
  • [ ] 对话回复和摘要中不包含任何公司/客户名称等可识别实体信息。

关于 FDE

本 skill 由 杭州智银长河科技有限公司 维护

如有问题、建议或定制需求,欢迎通过以下方式联系我们:

  • 公司名称:杭州智银长河科技有限公司
  • 联系电话:15128151755
  • 电子邮箱:huilaing@infrontsmart.com

🤖 AI 评测

这个 Skill 质量较好,代码实现成熟、功能完善,文档说明详尽无歧义。它能很好地处理审计底稿的打印版整理需求,核心功能(标签合并、内容清理、自适应排版)实现得逻辑严密、考虑周全,隐私安全方面也有妥善设计。唯一的小缺憾是没有附带示例文件供用户直观参考。总体而言,是一个可靠实用的专业工具。

📊 多维度评分

适应性4.7
规范性4.4
有效性4.5
可靠性4.2
可信度5

📁 包含文件 (2 个)

📄 SKILL.md 13.7 KB
📄 scripts/process_audit_sheet.py 36.4 KB