mcpField
X
xlsx

xlsx

github.com/leonchaox文档处理99072 次安装15 周前更新
代码仓库

关于 xlsx

xlsx 是用于创建、编辑和分析 Excel 工作簿的技能,面向处理电子表格的用户。它强调保留模板样式、使用公式,并在交付前重算和检查公式错误。

主要功能

  1. 01创建、编辑和分析 XLSX 文件
  2. 02使用公式执行计算
  3. 03保留现有模板格式
  4. 04重算并检查公式错误
  5. 05按财务模型规范格式化

适用场景

  1. 01制作含动态计算的 Excel 模型
  2. 02更新现有工作簿并保留样式
  3. 03分析工作簿中的表格数据

安装

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

$npx skills add https://github.com/leonchaox/qinyan-academic-skills --skill xlsx

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE.txt
scripts/office/
pack.py
scripts/office/helpers/
__init__.py
merge_runs.py
simplify_redlines.py
scripts/office/schemas/ecma/fouth-edition/
opc-contentTypes.xsd
opc-coreProperties.xsd
opc-digSig.xsd
opc-relationships.xsd
scripts/office/schemas/ISO-IEC29500-4_2016/
dml-chart.xsd
dml-chartDrawing.xsd
dml-diagram.xsd
dml-lockedCanvas.xsd
dml-main.xsd
dml-picture.xsd
dml-spreadsheetDrawing.xsd
dml-wordprocessingDrawing.xsd
pml.xsd
shared-additionalCharacteristics.xsd
shared-bibliography.xsd
shared-commonSimpleTypes.xsd
shared-customXmlDataProperties.xsd
shared-customXmlSchemaProperties.xsd
shared-documentPropertiesCustom.xsd
shared-documentPropertiesExtended.xsd
shared-documentPropertiesVariantTypes.xsd
shared-math.xsd
shared-relationshipReference.xsd
sml.xsd
vml-main.xsd

详细介绍

输出要求

所有 Excel 文件

专业字体
  • 除非用户另有指示,所有交付物都应使用一致的专业字体(例如 Arial、Times New Roman)
零公式错误
  • 每个 Excel 模型交付时都必须做到零公式错误(#REF!、#DIV/0!、#VALUE!、#N/A、#NAME?)
保留现有模板(在更新模板时)
  • 修改文件时,研究并完全匹配现有的格式、样式和惯例
  • 绝不要对已有既定模式的文件的强加标准化格式
  • 现有模板惯例始终优先于这些指南

财务模型

颜色编码标准

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

行业标准颜色惯例
  • 蓝色文本(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
公式错误预防
  • 验证所有单元格引用是否正确
  • 检查范围是否存在差一错误
  • 确保所有预测期间的公式保持一致
  • 用边缘情况(零值、负数)进行测试
  • 验证没有意外的循环引用
硬编码的文档要求
  • 在单元格中或旁边添加注释(如果在表格末尾)。格式:"Source: [System/Document], [Date], [Specific Reference], [URL if applicable]"
  • 示例:
    • "Source: Company 10-K, FY2024, Page 45, Revenue Note, [SEC EDGAR URL]"
    • "Source: Company 10-Q, Q2 2025, Exhibit 99.1, [SEC EDGAR URL]"
    • "Source: Bloomberg Terminal, 8/15/2025, AAPL US Equity"
    • "Source: FactSet, 8/20/2025, Consensus Estimates Screen"

XLSX 创建、编辑和分析

概述

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

重要要求

重新计算公式需要 LibreOffice:你可以假定已安装 LibreOffice,以便使用 scripts/recalc.py 脚本重新计算公式值。该脚本会在首次运行时自动配置 LibreOffice,包括在 Unix 套接字受限的沙盒环境中(由 scripts/office/soffice.py 处理)

读取和分析数据

使用 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 文件工作流

关键:使用公式,而不是硬编码值

始终使用 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. 重新计算公式(使用公式时必做):使用 scripts/recalc.py 脚本
    python scripts/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 文件中,公式以字符串形式存在,但没有计算值。使用提供的 scripts/recalc.py 脚本重新计算公式:

python scripts/recalc.py <excel_file> [timeout_seconds]

示例:

python scripts/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() 检查空值
  • 最右侧列:财年数据通常位于第 50 列及之后
  • 多重匹配:搜索所有出现的位置,而不仅仅是第一个
  • 除以零:在公式中使用 / 之前检查分母(#DIV/0!)
  • 错误引用:验证所有单元格引用都指向预期的单元格(#REF!)
  • 跨工作表引用:使用正确的格式(Sheet1!A1)链接工作表
公式测试策略
  • 从小处着手:先在 2-3 个单元格上测试公式,再大范围应用
  • 验证依赖关系:检查公式中引用的所有单元格是否存在
  • 测试边界情况:包含零、负数和极大值
解读 scripts/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
  • 公式会被保留但不会被计算 - 使用 scripts/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