mcpField
X
xlsx

xlsx

github.com/boshi-xixixi文档处理28037 次安装24 周前更新
代码仓库

关于 xlsx

xlsx 是指导 AI Agent 创建、编辑和分析 Excel 文件的技能,面向电子表格与财务建模任务。它强调使用公式、保留现有模板格式,并通过 LibreOffice 重算和检查公式错误。

主要功能

  1. 01创建、编辑和分析 Excel 文件
  2. 02使用公式保持计算动态
  3. 03保留现有模板样式和规范
  4. 04应用财务模型格式标准
  5. 05重算公式并扫描错误

适用场景

  1. 01构建含动态计算的财务模型
  2. 02更新时维持既有工作簿格式
  3. 03分析单张或多张工作表数据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/boshi-xixixi/traeskill --skill xlsx

安装后在 Claude Code 中输入/xlsx确认已加载。

附带文件LICENSE.txtrecalc.py

详细介绍

输出要求

所有 Excel 文件

公式错误为零
  • 每个 Excel 模型交付时都 MUST 确保公式错误为零(#REF!、#DIV/0!、#VALUE!、#N/A、#NAME?)
保留现有模板(更新模板时)
  • 修改文件时,仔细研究并 EXACTLY 匹配现有格式、样式和约定
  • 不要将标准化格式强加给已有成熟模式的文件
  • 现有模板约定始终优先于这些指南

财务模型

颜色编码标准

除非用户另有说明或现有模板另有规定

行业标准颜色约定
  • 蓝色文本(RGB: 0,0,255):硬编码输入,以及用户会在情景分析中更改的数字
  • 黑色文本(RGB: 0,0,0):所有公式和计算
  • 绿色文本(RGB: 0,128,0):从同一工作簿中的其他工作表提取数据的链接
  • 红色文本(RGB: 255,0,0):指向其他文件的外部链接
  • 黄色背景(RGB: 255,255,0):需要注意的关键假设或需要更新的单元格
数字格式标准
必需的格式规则
  • 年份:设置为文本字符串格式(例如,使用 "2024",而不是 "2,024")
  • 货币:使用 $#,##0 格式;始终在标题中注明单位("Revenue ($mm)")
  • 零值:使用数字格式将所有零显示为 "-",百分比也包括在内(例如,"$#,##0;($#,##0);-")
  • 百分比:默认使用 0.0% 格式(保留一位小数)
  • 倍数:估值倍数(EV/EBITDA、P/E)使用 0.0x 格式
  • 负数:使用括号表示(123),不要使用减号表示(-123)
公式构建规则
假设的放置
  • 将所有假设(增长率、利润率、倍数等)放在单独的假设单元格中
  • 在公式中使用单元格引用,而不是硬编码数值
  • 示例:使用 =B5*(1+$B$6),而不是 =B5*1.05
公式错误预防
  • 验证所有单元格引用是否正确
  • 检查范围中是否存在偏移一位的错误
  • 确保所有预测期的公式一致
  • 使用边界情况进行测试(零值、负数)
  • 确认不存在非预期的循环引用
硬编码数据的文档要求
  • 添加批注,或在旁边的单元格中注明(如果位于表格末尾)。格式:"来源:[系统/文档],[日期],[具体引用],[适用时提供 URL]"
  • 示例:
    • "来源:公司 10-K,FY2024,第 45 页,收入附注,[SEC EDGAR URL]"
    • "来源:公司 10-Q,Q2 2025,附件 99.1,[SEC EDGAR URL]"
    • "来源:Bloomberg Terminal,8/15/2025,AAPL US Equity"
    • "来源:FactSet,8/20/2025,共识预估界面"

XLSX 的创建、编辑和分析

概述

用户可能会要求你创建、编辑或分析 .xlsx 文件的内容。针对不同任务,你可以使用不同的工具和工作流。

重要要求

公式重新计算必须使用 LibreOffice:可以假设已安装 LibreOffice,用于通过 recalc.py 脚本重新计算公式值。该脚本会在首次运行时自动配置 LibreOffice

读取和分析数据

使用 pandas 进行数据分析

进行数据分析、可视化和基本操作时,请使用功能强大的数据处理工具 pandas:

import pandas as pd

# Read Excel
df = pd.read_excel('file.xlsx')  # Default: first sheet
all_sheets = pd.read_excel('file.xlsx', sheet_name=None)  # All sheets as dict

# Analyze
df.head()      # Preview data
df.info()      # Column info
df.describe()  # Statistics

# Write Excel
df.to_excel('output.xlsx', index=False)

Excel 文件工作流

交互式开发(Interactive Development)

创建复杂财务模型或进行数据分析时,使用 mcp-feedback-enhanced(例如 ask_followup_question)确认关键假设、格式要求或图表偏好。

重要:使用公式,不要使用硬编码值

始终使用 Excel 公式,而不是在 Python 中计算数值后再将其硬编码。 这样可以确保电子表格保持动态并可更新。

❌ 错误 - 硬编码计算值
# Bad: Calculating in Python and hardcoding result
total = df['Sales'].sum()
sheet['B10'] = total  # Hardcodes 5000

# Bad: Computing growth rate in Python
growth = (df.iloc[-1]['Revenue'] - df.iloc[0]['Revenue']) / df.iloc[0]['Revenue']
sheet['C5'] = growth  # Hardcodes 0.15

# Bad: Python calculation for average
avg = sum(values) / len(values)
sheet['D20'] = avg  # Hardcodes 42.5
✅ 正确 - 使用 Excel 公式
# Good: Let Excel calculate the sum
sheet['B10'] = '=SUM(B2:B9)'

# Good: Growth rate as Excel formula
sheet['C5'] = '=(C4-C2)/C2'

# Good: Average using Excel function
sheet['D20'] = '=AVERAGE(D2:D19)'

这适用于所有计算,包括总计、百分比、比率、差值等。源数据发生变化时,电子表格应能够重新计算。

常见工作流

  1. 选择工具:处理数据使用 pandas,处理公式和格式使用 openpyxl
  2. 创建/加载:创建新工作簿或加载现有文件
  3. 修改:添加/编辑数据、公式和格式
  4. 保存:写入文件
  5. 重新计算公式(使用公式时必须执行):使用 recalc.py 脚本
    python recalc.py output.xlsx
    
  6. 验证并修复错误:
    • 脚本会返回包含错误详情的 JSON
    • 如果 status 为 errors_found,请检查 error_summary,了解具体错误类型和位置
    • 修复已识别的错误,然后再次重新计算
    • 常见错误:
      • #REF!:单元格引用无效
      • #DIV/0!:除数为零
      • #VALUE!:公式中的数据类型错误
      • #NAME?:无法识别的公式名称
创建新的 Excel 文件
# Using openpyxl for formulas and formatting
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment

wb = Workbook()
sheet = wb.active

# Add data
sheet['A1'] = 'Hello'
sheet['B1'] = 'World'
sheet.append(['Row', 'of', 'data'])

# Add formula
sheet['B2'] = '=SUM(A1:A10)'

# Formatting
sheet['A1'].font = Font(bold=True, color='FF0000')
sheet['A1'].fill = PatternFill('solid', start_color='FFFF00')
sheet['A1'].alignment = Alignment(horizontal='center')

# Column width
sheet.column_dimensions['A'].width = 20

wb.save('output.xlsx')
编辑现有 Excel 文件
# Using openpyxl to preserve formulas and formatting
from openpyxl import load_workbook

# Load existing file
wb = load_workbook('existing.xlsx')
sheet = wb.active  # or wb['SheetName'] for specific sheet

# Working with multiple sheets
for sheet_name in wb.sheetnames:
    sheet = wb[sheet_name]
    print(f"Sheet: {sheet_name}")

# Modify cells
sheet['A1'] = 'New Value'
sheet.insert_rows(2)  # Insert row at position 2
sheet.delete_cols(3)  # Delete column 3

# Add new sheet
new_sheet = wb.create_sheet('NewSheet')
new_sheet['A1'] = 'Data'

wb.save('modified.xlsx')

重新计算公式

使用 openpyxl 创建或修改的 Excel 文件会将公式保存为字符串,但不会保存计算结果。请使用提供的 recalc.py 脚本重新计算公式:

python recalc.py <excel_file> [timeout_seconds]

示例:

python recalc.py output.xlsx 30

该脚本:

  • 首次运行时会自动设置 LibreOffice 宏
  • 重新计算所有工作表中的所有公式
  • 扫描所有单元格,查找 Excel 错误(#REF!、#DIV/0! 等)
  • 返回包含详细错误位置和数量的 JSON
  • 支持 Linux 和 macOS

公式验证清单

快速检查公式是否正常运行:

基本验证
  • 测试 2-3 个示例引用:在构建完整模型前,确认引用的数据正确
  • 列映射:确认 Excel 列对应正确(例如,第 64 列是 BL,而不是 BK)
  • 行偏移:请记住,Excel 行号从 1 开始计数(DataFrame 第 5 行 = Excel 第 6 行)
常见问题
  • NaN 处理:使用 pd.notna() 检查空值
  • 最右侧列:FY 数据通常位于第 50 列及之后
  • 多个匹配项:搜索所有匹配项,而不只是第一个
  • 除数为零:在公式中使用 / 前检查分母(#DIV/0!)
  • 引用错误:确认所有单元格引用均指向预期单元格(#REF!)
  • 跨工作表引用:使用正确格式(Sheet1!A1)链接工作表
公式测试策略
  • 从小范围开始:先在 2-3 个单元格中测试公式,再广泛应用
  • 验证依赖项:检查公式中引用的所有单元格是否存在
  • 测试边缘情况:包括零、负数和非常大的值
解读 recalc.py 输出

脚本会返回包含错误详情的 JSON:

{
  "status": "success",           // or "errors_found"
  "total_errors": 0,              // Total error count
  "total_formulas": 42,           // Number of formulas in file
  "error_summary": {              // Only present if errors found
    "#REF!": {
      "count": 2,
      "locations": ["Sheet1!B5", "Sheet1!C10"]
    }
  }
}

最佳实践

库的选择
  • pandas:最适合数据分析、批量操作和简单的数据导出
  • openpyxl:最适合复杂格式、公式和 Excel 专属功能
使用 openpyxl
  • 单元格索引从 1 开始(row=1、column=1 对应单元格 A1)
  • 使用 data_only=True 读取计算结果:load_workbook('file.xlsx', data_only=True)
  • 警告:如果使用 data_only=True 打开文件后再保存,公式会被结果值替换并永久丢失
  • 对于大型文件:读取时使用 read_only=True,写入时使用 write_only=True
  • 公式会保留但不会计算;请使用 recalc.py 更新计算结果
使用 pandas
  • 指定数据类型以避免推断问题:pd.read_excel('file.xlsx', dtype={'id': str})
  • 对于大型文件,仅读取指定列:pd.read_excel('file.xlsx', usecols=['A', 'C', 'E'])
  • 正确处理日期:pd.read_excel('file.xlsx', parse_dates=['date_column'])

代码风格指南

重要:生成用于 Excel 操作的 Python 代码时:

  • 编写精简、简洁的 Python 代码,避免不必要的注释
  • 避免冗长的变量名和重复操作
  • 避免不必要的 print 语句

对于 Excel 文件本身:

  • 为包含复杂公式或重要假设的单元格添加注释
  • 记录硬编码值的数据来源
  • 为关键计算和模型部分添加说明

评论

支持 Markdown