XLSX Skill 详解
Excel 电子表格的创建、编辑和分析
基本信息
| 属性 | 值 |
|---|---|
| 名称 | xlsx |
| 类别 | 文档处理 |
| 输出格式 | .xlsx, .xlsm, .csv, .tsv |
| 许可证 | 专有(仅源码可见) |
yaml
name: xlsx
description: "Comprehensive spreadsheet creation, editing, and analysis
with support for formulas, formatting, data analysis, and visualization.
When Claude needs to work with spreadsheets (.xlsx, .xlsm, .csv, .tsv, etc)
for: (1) Creating new spreadsheets with formulas and formatting, (2) Reading
or analyzing data, (3) Modify existing spreadsheets while preserving formulas,
(4) Data analysis and visualization in spreadsheets, or (5) Recalculating
formulas"1. 输出要求
1.1 所有 Excel 文件
markdown
**零公式错误**:
每个 Excel 模型必须交付时没有公式错误:
- #REF! 无效引用
- #DIV/0! 除以零
- #VALUE! 数据类型错误
- #N/A 找不到值
- #NAME? 无法识别的公式名
**保留现有模板**:
修改文件时,必须精确匹配现有格式、样式和约定1.2 金融模型专用规范
颜色编码标准
| 颜色 | RGB 值 | 用途 |
|---|---|---|
| 蓝色文字 | (0,0,255) | 硬编码输入,用户会更改的数字 |
| 黑色文字 | (0,0,0) | 所有公式和计算 |
| 绿色文字 | (0,128,0) | 从同工作簿其他工作表引用 |
| 红色文字 | (255,0,0) | 外部文件链接 |
| 黄色背景 | (255,255,0) | 需要关注的关键假设 |
数字格式标准
| 类型 | 格式 | 示例 |
|---|---|---|
| 年份 | 文本字符串 | "2024"(不是 2,024) |
| 货币 | $#,##0 | 标题说明单位:"Revenue ($mm)" |
| 零值 | 使用 "-" | $#,##0;($#,##0);- |
| 百分比 | 0.0% | 一位小数 |
| 倍数 | 0.0x | EV/EBITDA, P/E |
| 负数 | 括号 | (123) 而非 -123 |
2. 核心原则:使用公式
2.1 关键规则
markdown
**始终使用 Excel 公式,而非硬编码计算值**
这确保电子表格保持动态和可更新2.2 错误示例
python
# ❌ 错误 - 在 Python 中计算并硬编码结果
total = df['Sales'].sum()
sheet['B10'] = total # 硬编码 5000
# ❌ 错误 - Python 计算增长率
growth = (df.iloc[-1]['Revenue'] - df.iloc[0]['Revenue']) / df.iloc[0]['Revenue']
sheet['C5'] = growth # 硬编码 0.152.3 正确示例
python
# ✓ 正确 - 让 Excel 计算总和
sheet['B10'] = '=SUM(B2:B9)'
# ✓ 正确 - 增长率作为 Excel 公式
sheet['C5'] = '=(C4-C2)/C2'
# ✓ 正确 - 使用 Excel 函数求平均
sheet['D20'] = '=AVERAGE(D2:D19)'3. 读取和分析数据
3.1 使用 pandas
python
import pandas as pd
# 读取 Excel
df = pd.read_excel('file.xlsx') # 默认:第一个工作表
all_sheets = pd.read_excel('file.xlsx', sheet_name=None) # 所有工作表作为字典
# 分析
df.head() # 预览数据
df.info() # 列信息
df.describe() # 统计摘要
# 写入 Excel
df.to_excel('output.xlsx', index=False)4. 创建新 Excel 文件
4.1 使用 openpyxl
python
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment
wb = Workbook()
sheet = wb.active
# 添加数据
sheet['A1'] = 'Hello'
sheet['B1'] = 'World'
sheet.append(['Row', 'of', 'data'])
# 添加公式
sheet['B2'] = '=SUM(A1:A10)'
# 格式化
sheet['A1'].font = Font(bold=True, color='FF0000')
sheet['A1'].fill = PatternFill('solid', start_color='FFFF00')
sheet['A1'].alignment = Alignment(horizontal='center')
# 列宽
sheet.column_dimensions['A'].width = 20
wb.save('output.xlsx')5. 编辑现有 Excel 文件
python
from openpyxl import load_workbook
# 加载现有文件
wb = load_workbook('existing.xlsx')
sheet = wb.active # 或 wb['SheetName']
# 遍历工作表
for sheet_name in wb.sheetnames:
sheet = wb[sheet_name]
print(f"Sheet: {sheet_name}")
# 修改单元格
sheet['A1'] = 'New Value'
sheet.insert_rows(2) # 在位置 2 插入行
sheet.delete_cols(3) # 删除第 3 列
# 添加新工作表
new_sheet = wb.create_sheet('NewSheet')
new_sheet['A1'] = 'Data'
wb.save('modified.xlsx')6. 公式重新计算
6.1 为什么需要重新计算
markdown
openpyxl 创建或修改的 Excel 文件包含公式字符串,
但不包含计算后的值。
必须使用 recalc.py 脚本重新计算公式。6.2 使用 recalc.py
bash
python recalc.py <excel_file> [timeout_seconds]
# 示例
python recalc.py output.xlsx 306.3 脚本功能
markdown
- 首次运行时自动设置 LibreOffice 宏
- 重新计算所有工作表中的所有公式
- 扫描所有单元格查找 Excel 错误
- 返回 JSON 格式的详细错误位置和计数
- 支持 Linux 和 macOS6.4 解读输出
json
{
"status": "success", // 或 "errors_found"
"total_errors": 0, // 总错误数
"total_formulas": 42, // 文件中的公式数
"error_summary": { // 仅在发现错误时出现
"#REF!": {
"count": 2,
"locations": ["Sheet1!B5", "Sheet1!C10"]
}
}
}7. 公式验证清单
7.1 基本验证
markdown
- [ ] **测试 2-3 个样本引用**:在构建完整模型前验证
- [ ] **列映射**:确认 Excel 列匹配(如列 64 = BL,不是 BK)
- [ ] **行偏移**:Excel 行是 1 索引的(DataFrame 行 5 = Excel 行 6)7.2 常见陷阱
markdown
- [ ] **NaN 处理**:使用 pd.notna() 检查空值
- [ ] **远右列**:FY 数据常在列 50+
- [ ] **多重匹配**:搜索所有出现,不只是第一个
- [ ] **除以零**:在公式中使用 / 前检查分母
- [ ] **错误引用**:验证所有单元格引用指向正确位置
- [ ] **跨表引用**:使用正确格式(Sheet1!A1)7.3 测试策略
markdown
- [ ] **从小开始**:在广泛应用前测试 2-3 个单元格
- [ ] **验证依赖**:检查公式引用的所有单元格存在
- [ ] **测试边界情况**:包括零、负数和非常大的值8. 最佳实践
8.1 库选择
| 需求 | 推荐库 |
|---|---|
| 数据分析、批量操作 | pandas |
| 复杂格式、公式、Excel 特性 | openpyxl |
8.2 openpyxl 注意事项
markdown
- 单元格索引是 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 更新值8.3 pandas 注意事项
markdown
- 指定数据类型避免推断问题:
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'])9. 假设值管理
9.1 放置位置
markdown
**所有假设**(增长率、利润率、倍数等)
必须放在单独的假设单元格中
使用单元格引用代替公式中的硬编码值9.2 示例
python
# ✓ 正确:使用假设单元格引用
sheet['B5'] = 5000 # 基础收入
sheet['B6'] = 0.05 # 增长率假设
sheet['B7'] = '=B5*(1+$B$6)' # 使用引用
# ✗ 错误:硬编码值
sheet['B7'] = '=B5*1.05' # 硬编码增长率9.3 硬编码值的文档要求
markdown
**格式**:
"Source: [系统/文档], [日期], [具体引用], [URL(如适用)]"
**示例**:
- "Source: Company 10-K, FY2024, Page 45, Revenue Note, [SEC EDGAR URL]"
- "Source: Bloomberg Terminal, 8/15/2025, AAPL US Equity"
- "Source: FactSet, 8/20/2025, Consensus Estimates Screen"10. 通用工作流
markdown
1. **选择工具**:pandas 用于数据,openpyxl 用于公式/格式
2. **创建/加载**:创建新工作簿或加载现有文件
3. **修改**:添加/编辑数据、公式和格式
4. **保存**:写入文件
5. **重新计算公式(如使用公式则必须)**:
python recalc.py output.xlsx
6. **验证并修复错误**:
- 检查 status 是否为 errors_found
- 修复识别的错误
- 再次重新计算11. 使用示例
11.1 触发方式
"帮我创建一个 Excel 报表"
"分析这个电子表格中的数据"
"为这个财务模型添加公式"
"create a spreadsheet with formulas"
"recalculate this Excel file"12. 本节小结
| 要点 | 说明 |
|---|---|
| 使用公式 | 始终用 Excel 公式,不要硬编码计算值 |
| 重新计算 | 使用 recalc.py 更新公式值 |
| 零错误 | 交付时必须没有公式错误 |
| 颜色编码 | 金融模型使用行业标准颜色 |
| 假设分离 | 假设值放在单独单元格中 |
返回:Skills 目录