关于 kimi-xlsx
kimi-xlsx 是面向 Excel 文件创建、分析和校验的技能,适用于需要处理表格数据的用户。它结合 Python 表格操作与 KimiXlsx 命令行工具,检查公式、引用、数据透视表及文件结构。
主要功能
- 01使用 openpyxl 和 pandas 创建表格
- 02检查公式错误与引用异常
- 03分析工作表、表格及数据范围
- 04创建数据透视表和图表
- 05验证 Excel 文件结构
适用场景
- 01生成并格式化 Excel 工作簿
- 02检查公式及单元格引用问题
- 03分析现有工作簿的表格结构
- 04汇总数据并生成数据透视表
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ thvroyal/ kimi-skills --skill kimi-xlsx安装后在 Claude Code 中输入/kimi-xlsx确认已加载。
附带文件pivot-table.md
详细介绍
- 最终必须交付 Excel 文件,具体数量视任务而定,但交付内容必须包含一个 .xlsx 文件
- 确保整体交付内容简洁,且不要提供用户未要求的任何文件,尤其是 README 文档,因为这会占用过多上下文。
Excel 文件创建:Python + openpyxl/pandas
✅ Excel 创建所需技术栈:
- 运行时:Python 3
- 主要库:openpyxl(用于创建 Excel 文件、设置样式和编写公式)
- 数据处理:pandas(用于处理数据,然后通过 openpyxl 导出)
- 执行方式:使用
ipython工具编写 Python 代码
✅ 验证与数据透视表工具:
- 工具:KimiXlsx(用于验证、复查、创建数据透视表等的统一 CLI 工具)
- 执行方式:使用
shell工具运行 CLI 命令
🔧 执行环境:
- 使用
ipython工具通过 openpyxl/pandas 创建 Excel 文件 - 使用
shell工具运行验证命令
Python Excel 创建模式:
from openpyxl import Workbook
from openpyxl.styles import PatternFill, Font, Border, Side, Alignment
import pandas as pd
# Create workbook
wb = Workbook()
ws = wb.active
ws.title = "Data"
# Add data
ws['A1'] = "Header1"
ws['B1'] = "Header2"
# Apply styling
ws['A1'].font = Font(bold=True, color="FFFFFF")
ws['A1'].fill = PatternFill(start_color="333333", end_color="333333", fill_type="solid")
# Save
wb.save('output.xlsx')
</Technology Stack>
创建包含外部获取数据的 Excel 文件时:
来源引用(必需):
- 所有外部数据都必须在最终 Excel 文件中标注来源
- 🚨 此要求适用于所有外部工具:
datasource、web_search、API 调用或任何获取的数据 - 使用两列:
Source Name|Source URL - 不要使用 HYPERLINK 函数(使用纯文本以避免公式错误)
- ⛔ 禁止:交付包含外部数据但没有来源引用的 Excel 文件
- 示例:
| 数据内容 | 来源名称 | 来源 URL |
|---|---|---|
| Apple 收入 | Yahoo Finance | https://finance.yahoo.com/... |
| 中国 GDP | World Bank API | world_bank_open_data |
- 如果逐行标注来源不切实际,请创建一个专门的 “Sources” 工作表
</External Data in Excel>
Excel 任务可使用**两类工具**:1. Python(openpyxl/pandas) - 用于创建 Excel 文件、设置样式、编写公式和创建图表 2. KimiXlsx CLI 工具 - 用于验证、检查错误和创建数据透视表
KimiXlsx 工具有 6 个命令,可通过 shell 工具调用:
可执行文件路径:/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx
基础命令:/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx <command> [arguments]
- recheck ⚠️ 检查公式错误时优先运行
-
描述:此工具可检测:
- 公式错误:#VALUE!、#DIV/0!、#REF!、#NAME?、#NULL!、#NUM!、#N/A
- 零值单元格:结果为 0 的公式单元格(通常表示引用错误)
- 隐式数组公式:在 LibreOffice 中可运行、但在 MS Excel 中显示 #N/A 的公式(例如,
MATCH(TRUE(), range>0, 0))
-
隐式数组公式检测:
MATCH(TRUE(), range>0, 0)这类模式在 MS Excel 中需要使用 CSE(Ctrl+Shift+Enter)- LibreOffice 会自动处理这些公式,因此它们通过 LibreOffice 重新计算,但在 Excel 中会失败
- 检测到此类公式时,请改用其他写法:
- ❌
=MATCH(TRUE(), A1:A10>0, 0)→ 在 Excel 中显示 #N/A - ✅
=SUMPRODUCT((A1:A10>0)*ROW(A1:A10))-ROW(A1)+1→ 适用于所有 Excel 版本 - ✅ 或使用辅助列显式填入 TRUE/FALSE 值
- ❌
-
使用方法:
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx recheck output.xlsx
- reference-check(别名:refcheck)
- 描述:此工具用于检测 Excel 公式中潜在的引用错误和模式异常。它可以识别 AI 生成公式时常见的 4 类问题:
超出范围的引用 - 公式引用的范围远超实际数据行数。 包含标题行的引用 - 计算中错误地包含了第一行(通常为标题行)。 聚合函数范围不足 - SUM/AVERAGE 等函数仅涵盖 ≤2 个单元格。 公式模式不一致 - 同一列中的某些公式偏离了主要模式(“孤立”公式)。
- 使用方法:
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx reference-check output.xlsx
- inspect
- 描述:此命令分析 Excel 文件结构,并输出 JSON,描述所有工作表、表格、标题和数据范围。处理前可用此命令了解 Excel 文件的结构。
- 使用方法:
# Analyze and output JSON
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx inspect input.xlsx --pretty
- pivot 🚨 需要 pivot-table.md
- 描述:使用纯 OpenXML SDK 创建数据透视表(可选创建图表)。这是唯一支持的数据透视表创建方法。创建数据透视表时会自动同时创建图表(柱形图/折线图/饼图)。
- ⚠️ 重要:使用此命令前,必须阅读
/app/.kimi/skills/kimi-xlsx/pivot-table.md以了解完整文档。 - 必需参数:
input.xlsx- 输入 Excel 文件(位置参数)output.xlsx- 输出 Excel 文件(位置参数)--source "Sheet!A1:Z100"- 源数据范围--location "Sheet!A3"- 数据透视表的放置位置--values "Field:sum"- 值字段及其聚合方式(sum/count/avg/max/min)
- 可选参数:
--rows "Field1,Field2"- 行字段--cols "Field1"- 列字段--filters "Field1"- 筛选/页面字段--name "PivotName"- 数据透视表名称(默认:PivotTable1)--style "monochrome"- 样式主题:monochrome(默认)或finance--chart "bar"- 图表类型:bar(默认)、line或pie
- 使用方法:
# First: inspect to get sheet names and headers
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx inspect data.xlsx --pretty
# Then: create PivotTable with chart
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx pivot \
data.xlsx output.xlsx \
--source "Sales!A1:F100" \
--rows "Product,Region" \
--values "Revenue:sum,Units:count" \
--location "Summary!A3" \
--chart "bar"
- chart-verify
- 描述:验证所有图表是否包含实际数据内容。创建图表后使用此命令,确保图表不为空。
- 使用方法:
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx chart-verify output.xlsx
- 退出代码:
0= 所有图表均包含数据,可以安全交付1= 图表为空或已损坏 - 必须修复
- validate ⚠️ 强制要求 - 必须在交付前运行
-
描述:OpenXML 结构验证。未通过此验证的文件无法由 Microsoft Excel 打开。交付任何 Excel 文件前,必须运行此命令。
-
检查内容:
- 是否符合 OpenXML 架构(Office 2013 标准)
- 数据透视表和图表的结构完整性
- 不兼容的函数(FILTER、UNIQUE、XLOOKUP 等 - Excel 2019 及更早版本不支持)
- .rels 文件路径格式(绝对路径会导致 Excel 崩溃)
-
退出代码:
0= 验证通过,可以安全交付- 非零 = 验证失败 - 不要交付,重新生成文件
-
使用方法:
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx validate output.xlsx
- 如果验证失败:不要尝试“修复”文件。请使用修正后的代码从头重新生成。
</Tool script list>
默认情况下,交互式执行遵循以下原则: - **理解问题并明确目标**:总结问题、情况和目标 - **收集所需数据**:规划数据来源,并尽可能合理地获取数据。记录每次尝试;如果主要数据源不可用,则切换到其他方案 - **探索和清理数据(EDA)**:清理数据 → 使用描述性统计检查分布、相关性、缺失值和异常值 - **数据分析**:分析数据,提取有证据支持的见解:应用方法 → 报告显著效应 → 检查假设 → 处理异常值 → 验证稳健性 → 确保可复现性 - **审查和交叉检查**:逐步检查计算和分析并标记异常 → 使用替代数据、方法或切片进行验证 → 检查应用领域的合理性,并与外部基准或真实数据进行比较 → 清楚说明差异、验证过程和显著性 → 输出 `review.md` - 确保数值信息采用数字格式,而非文本格式 - 对于涉及数据分析的任务,使用 Excel 公式计算表格。 - 务必检查公式引用的单元格是否错位。尤其是计算结果为 0 或空值时,重新检查这些单元格引用的数据 - 公式计算所用的所有值都必须是数字格式,而非文本格式。使用 openpyxl 写入时请务必注意 - 打开 Excel 后,所有参与计算的内容都必须具有有效值,且不能因循环引用而无法计算。 - 计算公式时请注意引用的准确性,务必仔细检查引用的单元格是否确实是公式要计算的单元格,切勿在计算时引用错误的单元格 - 对于涉及财务或财政数据的表格,请确保数字以货币格式计算和呈现(即在数字前添加货币符号)。 - 如果某些公式需要**情景假设**才能得出计算结果,请**预先填写这些情景假设**。确保**每张表格中每个需要计算的单元格**都获得**计算值**,而不是注明“需要情景模拟”或“需要手动计算”。<Excel Creation Workflow - MUST FOLLOW>
📋 Excel 创建工作流(逐工作表验证)
🚨 关键:每个工作表创建后立即验证,而不是等所有工作表完成后再验证!
For each sheet in workbook:
1. PLAN → Design this sheet's structure, formulas, references
2. CREATE → Write data, formulas, styling for this sheet
3. SAVE → Save the workbook (wb.save())
4. CHECK → Run recheck + reference-check → Fix until 0 errors
5. NEXT → Only proceed to next sheet after current sheet has 0 errors
After ALL sheets pass:
6. VALIDATE → Run `validate` command → Fix until exit code 0
7. DELIVER → Only deliver files that passed ALL validations
逐工作表检查命令
# After creating/modifying EACH sheet, save and run:
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx recheck output.xlsx
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx reference-check output.xlsx
# Fix ALL errors before creating the next sheet!
最终验证(所有工作表完成后)
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx validate output.xlsx
为什么要逐个工作表验证?
- 工作表 1 中的错误会传递到工作表 2、工作表 3……导致连锁故障
- 每个工作表修复 3 个错误,比最后一次性修复 30 个错误更容易
- 可以立即验证跨工作表引用
</Excel Creation Workflow - MUST FOLLOW>
对于所有涉及公式的数据分析任务,你必须先为每个工作表创建一份**分析计划**,然后使用适当的工具生成该工作表,接着运行 Recheck 和 ReferenceCheck 来检测并修复错误,最后保存。之后,再开始创建和迭代下一个工作表,并重复此流程。⚠️ 关键:Excel 公式始终是首选
对于任何分析任务,使用 Excel 公式是默认且首选的方法。凡是可以使用公式的地方,都必须使用公式。
✅ 正确——使用 Excel 公式:
ws['C2'] = '=A2+B2' # Sum
ws['D2'] = '=C2/B2*100' # Percentage
ws['E2'] = '=SUM(A2:A100)' # Aggregation
❌ 禁止——在 Python 中预先计算后粘贴静态值:
result = value_a + value_b
ws['C2'] = result # BAD: Static value, not a formula
仅在以下情况下使用静态值:
- 数据来自外部来源(网络搜索、API)
- 值是永不变化的常量
- 公式会造成循环引用
遵循此工作流::
Sheet 1: Plan (write detailed design) → Create → Save → Run Recheck → Run ReferenceCheck → Fix errors → Zero errors ✓
Sheet 2: Plan (write detailed design) → Create → Save → Run Recheck → Run ReferenceCheck → Fix errors → Zero errors ✓
Sheet 3: Plan (write detailed design) → Create → Save → Run Recheck → Run ReferenceCheck → Fix errors → Zero errors ✓
...
🚨 关键:Recheck 结果是最终结果——绝无例外
recheck 命令会检测公式错误(#VALUE!、#DIV/0!、#REF!、#NAME?、#N/A 等)和零值单元格。你必须严格遵循以下规则:
-
错误零容忍:如果
recheck报告任何错误,必须在交付前修复。绝无例外。 -
不要假设错误会“自动解决”:
- ❌ 错误:“用户在 Excel 中打开文件后,这些错误就会消失”
- ❌ 错误:“Excel 会自动重新计算并修复这些错误”
- ✅ 正确:修复
recheck报告的所有错误,直到 error_count = 0
-
检测到的错误都必须修复:
- 如果
recheck显示error_count: 5,就有 5 个错误需要修复 - 如果
recheck显示zero_value_count: 3,就有 3 个可疑单元格需要核查 - 只有当
error_count: 0时,才能继续下一步
- 如果
-
应避免的常见错误:
- ❌ “#REF! 错误是因为 openpyxl 不会计算公式”——错误,必须修复!
- ❌ “打开 Excel 后 #VALUE! 就会解决”——错误,必须修复!
- ❌ “零值是预期的”——逐一核查,很多都是引用错误!
-
交付门槛:存在任何
recheck错误的文件都不能交付给用户。
禁止的模式 ❌:
1. Create Sheet 1 → Create Sheet 2 → Create Sheet 3 → Run Recheck once at end
❌ WRONG: Errors accumulate, debugging becomes exponentially harder
✅ CORRECT: Check after EACH sheet, fix before moving to next
2. Skip planning for any sheet
❌ WRONG: Causes 80%+ of reference errors
✅ CORRECT: Plan each sheet's structure before creating it
3. Recheck shows errors → Ignore and deliver anyway
❌ ABSOLUTELY FORBIDDEN - errors must be fixed, not ignored!
4. Recheck shows errors → Proceed to create next sheet anyway
❌ WRONG: Errors in Sheet 1 will cascade to Sheet 2, 3...
✅ CORRECT: Fix ALL errors in current sheet before creating next sheet
</Analyze loop>
**使用场景**:用户请求查找/匹配/搜索;多个表共享键(ProductID、EmployeeID);主从关系;代码与名称映射;通过共同键关联跨文件数据;关键词:“基于”“来自另一个表”“匹配”语法:=VLOOKUP(lookup_value, table_array, col_index_num, FALSE)——table_array 中的查找列必须位于最左侧
最佳实践:使用 FALSE 进行精确匹配;用 $A$2:$D$100 锁定范围;用 IFERROR(...,"N/A") 包装;跨工作表引用:Sheet2!$A$2:$C$100
错误:#N/A=未找到;#REF!=col_index 超出列数。替代方案:当查找列不在最左侧时,使用 INDEX/MATCH
ws['D2'] = '=IFERROR(VLOOKUP(A2,$G$2:$I$50,3,FALSE),"N/A")'
</VLOOKUP Usage Rules>
🚨 关键:创建 PivotTable 前必须阅读 pivot-table.md
触发条件:检测到用户有以下任一意图时:
- 用户明确请求“pivot table”“data pivot”或“数据透视表”
- 任务需要按类别汇总数据
- 关键词:汇总、聚合、分组、分类、细分、统计、分布、按……计数、按……求总计
- 数据集有 50 行以上,且需要分组
- 需要交叉制表或多维分析
⚠️ 必须执行的操作: 检测到需要 PivotTable 时,你必须:
- 先阅读
/app/.kimi/skills/kimi-xlsx/pivot-table.md - 遵循该文档中的执行顺序和工作流
- 使用
pivot命令(不得手动编写代码创建) 为什么必须这样做:
- 创建数据透视表使用纯 OpenXML SDK(C# 工具)
pivot命令提供稳定且经过测试的实现- 不支持且禁止使用 openpyxl 手动构建数据透视表
- 图表类型(柱形图/折线图/饼图)会随数据透视表自动创建
快速参考(详情见 pivot-table.md):
# Step 1: Inspect data structure
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx inspect data.xlsx --pretty
# Step 2: Create PivotTable with chart
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx pivot \
data.xlsx output.xlsx \
--source "Sheet!A1:F100" \
--rows "Category" \
--values "Revenue:sum" \
--location "Summary!A3" \
--chart "bar"
# Step 3: Validate
/app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx validate output.xlsx
⛔ 禁止:
- 使用 openpyxl 代码手动创建数据透视表
- 跳过
inspect步骤 - 创建数据透视表前不阅读 pivot-table.md
- 🚨 绝不要使用 openpyxl 修改数据透视表输出文件——openpyxl 会破坏 pivotCache 路径!
⚠️ 关键:数据透视表工作流顺序 如果需要向将包含数据透视表的文件中添加额外工作表(封面、摘要等):
- 首先:使用 openpyxl 创建所有工作表(数据工作表、封面工作表、样式等)
- 然后:运行
pivot命令作为最后一步 - 绝不要:再次使用 openpyxl 打开数据透视表输出文件——这会破坏文件!
✅ CORRECT ORDER:
openpyxl creates base.xlsx (with Cover, Data sheets)
→ pivot command: base.xlsx → final.xlsx (adds PivotTable)
→ validate final.xlsx
→ DELIVER final.xlsx (do NOT modify again)
❌ WRONG ORDER (WILL CORRUPT FILE):
pivot command creates pivot.xlsx
→ openpyxl opens pivot.xlsx to add Cover sheet ← CORRUPTS FILE!
→ File cannot be opened in MS Excel
</PivotTable Module>
**禁止出现的公式错误**: 1. 公式错误:#VALUE!、#DIV/0!、#REF!、#NAME?、#NULL!、#NUM!、#N/A——绝不允许出现 2. 引用偏移一位(错误的单元格/行/列) 3. 以 `=` 开头的文本被当作公式 4. 使用静态值而非公式(计算应使用公式) 5. 占位文本:"TBD"、"Pending"、"Manual calculation required"——禁止使用 6. 标题缺少单位;计算中的单位不一致 7. 货币未使用格式符号(¥/$) 8. 必须核实结果为 0 的情况——这通常表示引用错误🚨 禁止使用的函数(与较旧版本的 Excel 不兼容):
以下函数在 Excel 2019 及更早版本中不受支持。使用这些函数的文件将无法在较旧版本的 Excel 中打开。请改用传统替代方案。
| ❌ 禁止使用的函数 | ✅ 替代方案 |
|---|---|
FILTER() | 使用自动筛选,或 SUMIF/COUNTIF/INDEX-MATCH |
UNIQUE() | 使用“删除重复项”功能,或使用包含 COUNTIF 的辅助列 |
SORT()、SORTBY() | 使用 Excel 的排序功能(数据 → 排序) |
XLOOKUP() | 使用 INDEX() + MATCH() 组合 |
XMATCH() | 使用 MATCH() |
SEQUENCE() | 使用 ROW() 或手动填充 |
LET() | 在辅助单元格中定义中间计算结果 |
LAMBDA() | 使用命名区域或 VBA |
RANDARRAY() | 使用 RAND() 并向下填充 |
ARRAYFORMULA() | 仅限 Google Sheets——使用 Ctrl+Shift+Enter 数组公式 |
QUERY() | 仅限 Google Sheets——使用 SUMIF/COUNTIF/数据透视表 |
IMPORTRANGE() | 仅限 Google Sheets——手动复制数据 |
禁止使用这些函数的原因:
- 这些函数属于 Excel 365/2021+ 的动态数组函数或 Google Sheets 函数
- 较旧版本的 Excel(2019、2016 等)无法解析这些公式
- 在较旧版本的 Excel 中打开文件时,程序会崩溃或显示错误
validate命令会检测并拒绝使用这些函数的文件
示例——将 FILTER 转换为 INDEX-MATCH:
❌ WRONG: =FILTER(A2:C100, B2:B100="Active")
✅ CORRECT: Use AutoFilter on the data range, or create a PivotTable
⚠️ 防止引用偏移一位:保存前,核实每个公式引用的单元格是否正确。运行 reference-check 工具。常见错误:引用了标题、行/列偏移错误。如果结果为 0 或不符合预期 → 首先检查引用。
💰 财务数值:以最小单位存储(15000000,而非 1.5M)。使用 Excel 格式控制显示:"¥#,##0"。绝不要使用需要在公式中进行换算的缩放单位。
</Baseline error>
</Analyze rule>
使用 python-openpyxl 包设计 Excel 样式。直接在 openpyxl 代码中应用样式。 **🎨 整体视觉设计原则** - **⚠️ 强制要求:隐藏网格线** - 所有工作表都必须隐藏网格线(参见下方代码) - 从 B2 开始(左上角留白),而不是 A1 - **标题行高度**:由于内容从 B2 开始,第 2 行通常是使用较大字体的标题行。务必增大第 2 行的高度,以避免文本被截断:`ws.row_dimensions[2].height = 30`(根据字体大小调整) - **专业性优先**:采用商务风格的配色方案,避免过度装饰而影响数据可读性 - **一致性**:相似数据类型使用统一的格式、字体和配色方案 - **层次分明**:通过字号、字重和颜色深浅建立信息层次 - **留白适当**:使用合理的边距和行高,避免内容拥挤 - 请为每个单元格设置合适的宽度和高度,避免单元格宽度不足、行高过高,导致显示比例失衡 --- **⚠️ 如何隐藏网格线(openpyxl)** ```python from openpyxl import Workbook wb = Workbook() ws = wb.active # Hide gridlines ws.sheet_view.showGridLines = False # ... add your data and styling ... wb.save('output.xlsx') ``` --- **📐 合并单元格指南** 使用 `ws.merge_cells()` 合并标题、跨列标题或分组标签。仅为**左上角单元格**应用样式。 ```python # Merge and style ws.merge_cells('B2:F2') ws['B2'] = "Report Title" ws['B2'].font = Font(size=18, bold=True) ws['B2'].alignment = Alignment(horizontal='center', vertical='center') ``` **规则**: - ✅ 适用于:标题、分区标题、跨列类别标签 - ❌ 避免用于:数据区域、公式范围、数据透视表源数据 - 务必为合并后的单元格设置 `alignment`,以确保文本位置正确 --- **🎨 样式选择指南** - **极简黑白灰样式**:所有非金融任务的默认样式(仅使用黑色、白色、灰色及蓝色点缀) - **专业金融样式**:用于金融/财政分析(股票、GDP、薪资、公共财政) --- <Minimalist_Monochrome_Style> ## 📊 极简黑白灰样式(默认) ### 🎨 核心配色原则(严格执行) **基础颜色(仅限以下 3 种):** - **白色(#FFFFFF)** - 背景、内容区域 - **黑色(#000000)** - 正文、主要标题 - **灰色(各种深浅)** - 结构、次要元素、边框 **点缀色(仅限蓝色,用于区分):** - 需要突出、区分或强调内容时,使用不同明度/饱和度的**蓝色** - 除地区性金融指标外,禁止使用其他颜色(如绿色、红色、橙色、紫色等) ### ⚠️ 严格禁止 - ❌ **禁止**使用绿色、红色、橙色、紫色、黄色、粉色或任何其他颜色 - ❌ **禁止**使用彩虹色或多色方案 - ❌ **禁止**使用高饱和度/鲜艳颜色(蓝色点缀除外) - ❌ **禁止**使用跨多个色相系列的颜色渐变 ### Python 配色方案 ```python # Minimalist Monochrome Style Palette from openpyxl.styles import PatternFill, Font, Border, Side, Alignment # Base Colors (Black/White/Grey ONLY) bg_white = "FFFFFF" # Primary background bg_light_grey = "F5F5F5" # Secondary background bg_row_alt = "F9F9F9" # Alternating row fill header_black = "000000" # Primary headers, totals header_dark_grey = "333333" # Main section headers text_dark = "000000" # Primary text border_grey = "D0D0D0" # All borders # Blue Accent (ONLY color for differentiation) blue_primary = "0066CC" # Key highlights blue_secondary = "4A90D9" # Secondary emphasis blue_light = "E6F0FA" # Subtle background highlight # Hide gridlines ws.sheet_view.showGridLines = False # Example: Apply header style header_fill = PatternFill(start_color=header_dark_grey, end_color=header_dark_grey, fill_type="solid") header_font = Font(color="FFFFFF", bold=True) for cell in ws['A1:D1'][0]: cell.fill = header_fill cell.font = header_font ``` </Minimalist_Monochrome_Style> <Professional_Finance_Style> ## 💎 专业金融样式(适用于金融任务) 当任务涉及股票、GDP、薪资、收入、利润、预算、ROI、公共财政或任何财政分析时,使用此样式。 ### 🚨 关键:金融数据的地区配色惯例 | **地区** | **价格上涨** | **价格下跌** | | --- | --- | --- | | **中国大陆** | **红色** | **绿色** | | **中国以外(国际)** | **绿色** | **红色** | ### Python 配色方案 ```python # Professional Finance Style Palette from openpyxl.styles import PatternFill, Font, Border, Side, Alignment bg_light = "ECF0F1" # Main background (light gray) text_dark = "000000" # Primary text accent_warm = "FFF3E0" # Key metrics highlight (pale orange) header_dark_blue = "1F4E79" # Header fill negative_red = "FF0000" # Negative values # Hide cell border line ws.sheet_view.showGridLines = False # Example: Apply Professional Finance header style gs_header_fill = PatternFill(start_color=header_dark_blue, end_color=header_dark_blue, fill_type="solid") gs_header_font = Font(color="FFFFFF", bold=True) gs_highlight_fill = PatternFill(start_color=accent_warm, end_color=accent_warm, fill_type="solid") for cell in ws['A1:D1'][0]: cell.fill = gs_header_fill cell.font = gs_header_font ``` </Professional_Finance_Style> --- <Conditional_Formatting> ## 🎯 条件格式(必须主动使用) **主动使用条件格式,创建专业且视觉效果出色的 Excel 交付成果。** | 数据类型 | 格式 | 代码示例 | |-----------|--------|--------------| | 数值 | **数据条** | `DataBarRule(start_type='min', end_type='max', color='4A90D9', showValue=True)` | | 分布 | **色阶** | `ColorScaleRule(start_type='min', start_color='FFFFFF', end_type='max', end_color='4A90D9')` | | KPI/状态 | **图标集** | `IconSetRule(icon_style='3TrafficLights1', type='percent', values=[0,33,67])` | | 阈值 | **突出显示单元格** | `CellIsRule(operator='greaterThan', formula=['100000'], fill=green_fill)` | | 排名 | **前/后** | `FormulaRule(formula=['RANK(A2,$A$2:$A$100)<=10'], fill=gold_fill)` | **图标样式**:`3TrafficLights1`(🔴🟡🟢)、`3Arrows`(↓→↑)、`3Symbols`(✗−✓)、`5Rating`(★) **不同风格的颜色**: - 单色:数据条 `4A90D9`,色阶 `F5F5F5→B0B0B0→333333` - 财务:正值 `63BE7B`,负值 `F8696B`,中性 `FFEB84` ```python from openpyxl.formatting.rule import DataBarRule, ColorScaleRule, IconSetRule, CellIsRule # Data Bar ws.conditional_formatting.add('C2:C100', DataBarRule(start_type='min', end_type='max', color='4A90D9', showValue=True)) # 3-Color Scale (Red→Yellow→Green) ws.conditional_formatting.add('D2:D100', ColorScaleRule(start_type='min', start_color='F8696B', mid_type='percentile', mid_value=50, mid_color='FFEB84', end_type='max', end_color='63BE7B')) # Icon Set ws.conditional_formatting.add('E2:E100', IconSetRule(icon_style='3TrafficLights1', type='percent', values=[0, 33, 67], showValue=True)) ``` **最佳实践**:每张工作表应用于 2-4 个关键列;保持颜色含义一致;结合使用数据条和图标以增强效果。 </Conditional_Formatting> --- **📝 文本颜色样式(必须遵循)** - **蓝色字体**:固定值/输入值 - **黑色字体**:包含计算公式的单元格 - **绿色字体**:引用其他工作表的单元格 - **红色字体**:包含外部引用的单元格 --- **📏 边框样式** - 通常情况下,不要为单元格添加边框,以使整体内容更加突出 - 除非需要用边框线体现计算结果,否则不要使用表格边框线 - 有时可以在模型中使用 1px 边框,并使用较粗的边框分隔不同部分 <Cover Page Design> **每份 Excel 交付成果都必须将封面页设为第一张工作表。** ## 封面页结构 | 行 | 内容 | 样式 | |-----|---------|-------| | 2-3 | **报告标题** | 大号字体(18-20pt)、粗体、居中 | | 5 | 副标题/说明 | 中号字体(12pt)、灰色 | | 7-15 | **关键指标摘要** | 使用带高亮的表格格式 | | 17-20 | **工作表索引** | 列出所有工作表并附上说明 | | 22+ | 备注和说明 | 小号字体、灰色 | ## 必需元素 **1. 报告标题** - 清晰描述工作簿内容的标题 **2. 关键指标摘要** - 3-6 个最重要的数字/发现: **3. 工作表索引** - 导航指南: ``` | Sheet Name | Description | |------------|-------------| | Raw Data | Original dataset (100 rows) | | Analysis | Sales breakdown by region | | Pivot Summary | Interactive pivot analysis | ``` **4. PivotTable 提示**(工作簿包含 PivotTable 时为必需项): ``` ⚠️ IMPORTANT: This workbook contains PivotTables. Please refresh data after opening: - Windows: Select PivotTable → Right-click → Refresh - Mac: Select PivotTable → PivotTable Analyze → Refresh - Or press Ctrl+Alt+F5 to refresh all ``` ## 封面页样式 - **背景**:纯白色或浅灰色(#F5F5F5) - **标题行高度**:30-40pt,突出显示 - **无网格线**:隐藏封面页的网格线,使外观更整洁 - **列宽**:合并标题区域的 A-G 列单元格 - **配色方案**:与工作簿的主题一致(单色/财务) ## 隐藏网格线 确保封面页的网格线仍保持隐藏 </Cover Page Design> ## ⚠️ 关键:必须创建真正的 Excel 图表 **更严格的要求(主动可视化)**: - 如果用户要求图表/可视化内容,你必须主动创建图表,不能等用户针对每个表格明确提出要求。 - 如果工作簿中有多个已准备好的数据集/表格,确保**每个已准备好的数据集至少对应一个图表**,除非用户明确另有要求。 - 如果有任何数据集尚未可视化,说明原因,并在交付前征求确认。 **触发关键词**——用户提到以下任意词语时,你必须创建实际嵌入的图表: - “可视化”“图表”“图形”“可视化内容”“可视化表格”“示意图” - “给我看看图表”“创建图表”“添加图表”“带图形” **❌ 绝对禁止**: - 创建包含数据并附有“转到「插入」>「图表」”说明的“CHARTS DATA”工作表 - 告诉用户自行手动创建图表 - 在没有实际图表的情况下,将“添加可视化图表”标记为已完成 **✅ 必须遵循**: - **默认**:使用 openpyxl 在 .xlsx 文件中创建嵌入式 Excel 图表 - **仅当用户明确要求时**:单独创建 PNG/JPG 图片文件 **强制工作流程**: ``` 1. Create Excel with openpyxl (data, styling) 2. Add charts using openpyxl.chart module 3. Save file 4. Run chart-verify to confirm charts exist and have data 5. If chart-verify returns exit code 1 → FIX before delivering ``` **📚 openpyxl 图表创建指南** ### 必需的导入项 ```python from openpyxl import Workbook from openpyxl.chart import BarChart, LineChart, PieChart, Reference from openpyxl.chart.label import DataLabelList ``` ### 图表创建示例(条形图) ```python from openpyxl import Workbook from openpyxl.chart import BarChart, Reference wb = Workbook() ws = wb.active # Sample data data = [ ['Category', 'Value'], ['A', 100], ['B', 200], ['C', 150], ] for row in data: ws.append(row) # Create chart chart = BarChart() chart.type = "col" # Column chart (vertical bars) chart.style = 10 chart.title = "Sales by Category" chart.y_axis.title = 'Value' chart.x_axis.title = 'Category' # Define data range data_ref = Reference(ws, min_col=2, min_row=1, max_row=4) cats_ref = Reference(ws, min_col=1, min_row=2, max_row=4) chart.add_data(data_ref, titles_from_data=True) chart.set_categories(cats_ref) chart.shape = 4 # Rectangular shape # Position chart ws.add_chart(chart, "E2") wb.save('output.xlsx') ``` ### 图表类型快速参考 | 图表类型 | openpyxl 类 | 关键配置 | |------------|----------------|------------| | 柱形图/条形图 | `BarChart()` | `type="col"`(垂直)或 `type="bar"`(水平) | | 折线图 | `LineChart()` | `style=10`,可选标记 | | 饼图 | `PieChart()` | 无需坐标轴 | | 面积图 | `AreaChart()` | `grouping="standard"` | ### 折线图示例 ```python from openpyxl.chart import LineChart, Reference chart = LineChart() chart.title = "Trend Analysis" chart.style = 13 chart.y_axis.title = 'Value' chart.x_axis.title = 'Month' data = Reference(ws, min_col=2, min_row=1, max_row=13, max_col=3) chart.add_data(data, titles_from_data=True) cats = Reference(ws, min_col=1, min_row=2, max_row=13) chart.set_categories(cats) ws.add_chart(chart, "E2") ``` ### 饼图示例 ```python from openpyxl.chart import PieChart, Reference pie = PieChart() pie.title = "Market Share" data = Reference(ws, min_col=2, min_row=1, max_row=5) labels = Reference(ws, min_col=1, min_row=2, max_row=5) pie.add_data(data, titles_from_data=True) pie.set_categories(labels) ws.add_chart(pie, "E2") ``` **创建图表后——必须执行**: ```bash /app/.kimi/skills/kimi-xlsx/scripts/KimiXlsx chart-verify output.xlsx ``` 退出代码 1 = 图表损坏 → 必须修复。没有例外——如果图表验证失败,无论采用何种数据嵌入方式,该图表都已损坏。 **图表类型选择**: | 数据类型 | 图表 | 使用场景 | |-----------|-------|----------| | 趋势 | 折线图 | 时间序列 | | 对比 | 柱形图/条形图 | 类别对比 | | 构成 | 饼图/圆环图 | 百分比(≤6 项) | | 分布 | 直方图 | 数据分布 | | 相关性 | 散点图 | 变量关系 | **图表配色方案**: - 单色:`333333`、`666666`、`0066CC`、`4A90D9` - 财务:`1F4E79`、`2E75B6`、`5B9BD5`、`9DC3E6` <注意事项> ## 🚨 Excel 创建工作流程(必须遵循) ``` Phase 1: DESIGN → Plan all sheets structure, formulas, cross-references before coding Phase 2: CREATE & VALIDATE (Per-Sheet Loop) For each sheet: 1. Create sheet (data, formulas, styling, charts if needed) 2. Save workbook 3. Run: recheck output.xlsx 4. Run: reference-check output.xlsx 5. Run: chart-verify output.xlsx (if sheet contains charts) 6. If errors found → Fix and repeat step 2-5 7. Only proceed to next sheet when current sheet has 0 errors Phase 3: FINAL VALIDATION → Run: validate output.xlsx → If exit code = 0: Safe to deliver → If exit code ≠ 0: Regenerate the file with corrected code Phase 4: DELIVER → Only deliver files that passed ALL validations ``` **⛔ 禁止的做法**: - 先创建所有工作表,最后才运行一次验证 - 忽略重新检查/参考检查错误,继续处理下一张工作表 - 交付未通过验证的文件 --- ## 其他要求 - 确保最终交付内容中至少包含一个 .xlsx 文件。 - 确保每个表格中都有内容,不得出现只有表头而没有内容的情况,请再次检查。 - 检查每个公式计算结果为 null 的单元格,确认其引用的单元格是否有值。 - 请合理设置表格的行高与列宽比例,避免显示混乱。 - 除非用户要求使用模拟数据,否则所有计算均须使用真实数据。 - 对于包含数字的单元格,请在表格标题中标明单位,不要在表格中的数字后标注单位。 - 确保按照要求使用样式模板设计 Excel。对于财务类任务,请使用 Professional Finance 样式模板。 - 🔍 **VLOOKUP**:对于跨表匹配任务,请参阅 ``。多文件场景:先将所有文件合并到一个工作簿中,再应用 VLOOKUP 公式。❌ 禁止:使用代码中的 merge() 代替 VLOOKUP 公式。 - 🚨 **PivotTable**:请参阅下文的 ``。必须先阅读 `pivot-table.md`。⛔ 禁止:在代码中手动构建数据透视表。 - 📊 **图表**:当用户要求“可视化”“图表”或“绘图”时,必须使用 openpyxl 创建真正的 Excel 图表。创建后,运行 `chart-verify` 工具。⛔ 禁止:创建“图表数据”工作表并让用户手动插入图表。 - 🔗 **外部数据源**:使用 `datasource`、`web_search` 或任何外部数据抓取工具时,必须在最终 Excel 中注明来源。添加 `Source Name` 和 `Source URL` 列,或创建专门的“Sources”工作表。⛔ 禁止:交付包含抓取数据但缺少来源引用的 Excel。