name: document-xlsx description: “创建、编辑、审计和提取Excel电子表格(.xlsx):生成报告/导出,应用公式/格式化/图表/数据验证,解析现有工作簿,并避免电子表格风险(公式注入、断裂链接、隐藏行)。支持ExcelJS、openpyxl、pandas、XlsxWriter和SheetJS。”
文档XLSX技能 — 快速参考
这个技能使得能够以编程方式创建、编辑和分析Excel电子表格。当用户需要生成数据报告、财务模型、自动化Excel工作流或处理电子表格数据时,Claude应该应用这些模式。
现代最佳实践 (2026年1月):
- 将电子表格视为软件:清晰的输入/输出、可审计性和版本控制。
- 保护数据完整性:控制总计、验证和可追溯性到源。
- 可访问性:标签、对比度、结构;使用Excel的可访问性检查器;在外部分发时满足采购/监管要求。
- 如果在欧盟或受监管的上下文中分发,遵循适用的可访问性要求(通常与EN 301 549 / WCAG对齐)。
- 发货时带有审查循环和所有者(避免“神秘模型”)。
- 安全:将不受信任的输入/工作簿视为敌对的(公式注入、外部链接、隐藏内容、宏)。
快速参考
| 任务 | 工具/库 | 语言 | 何时使用 |
|---|---|---|---|
| 创建XLSX | ExcelJS | Node.js | 报告, 数据导出 |
| 创建XLSX | openpyxl | Python | 读/写, 修改现有文件 |
| 创建XLSX | XlsxWriter | Python | 只写, 丰富格式化, 图表 |
| 数据分析 | pandas + openpyxl | Python | DataFrame到Excel带格式化 |
| 读取XLSX | xlsx (SheetJS) | Node.js | 解析电子表格 |
| 图表 | openpyxl/XlsxWriter | Python | 嵌入式可视化 |
| 样式 | ExcelJS/openpyxl | 两者 | 条件格式化 |
| 自动化 | xlwings | Python | Excel已安装, 交互式工作流 |
护栏和注意事项
- 公式计算:库写入公式;Excel在打开时计算结果。如果你需要在服务器端计算值,在代码中计算并写入值(或使用专用的公式引擎)。
- 数据透视表:程序化创建有限。如果真正需要原生数据透视表,更倾向于pandas摘要(数据透视表作为数据)或Excel自动化(xlwings/Office Scripts/VBA)。
- 宏:openpyxl可以保留现有的VBA(
keep_vba=True)但不编写宏;永远不要从不信任的输入生成或执行宏。 - 电子表格注入:永远不要将不受信任的字符串放入
formula字段;将它们写作文本值,并验证/清理用于导出的用户提供数据。
核心操作
创建电子表格 (Node.js - exceljs)
import ExcelJS from 'exceljs';
const workbook = new ExcelJS.Workbook();
const sheet = workbook.addWorksheet('Sales Report');
// 带样式的标题
sheet.columns = [
{ header: 'Product', key: 'product', width: 20 },
{ header: 'Quantity', key: 'qty', width: 12 },
{ header: 'Price', key: 'price', width: 12 },
{ header: 'Total', key: 'total', width: 15 },
];
// 样式标题行
sheet.getRow(1).font = { bold: true };
sheet.getRow(1).fill = {
type: 'pattern',
pattern: 'solid',
fgColor: { argb: 'FF4472C4' }
};
// 添加数据
const data = [
{ product: 'Widget A', qty: 100, price: 10 },
{ product: 'Widget B', qty: 50, price: 25 },
];
data.forEach((item, index) => {
sheet.addRow({
product: item.product,
qty: item.qty,
price: item.price,
total: { formula: `B${index + 2}*C${index + 2}` }
});
});
// 添加总计行
const lastRow = sheet.rowCount + 1;
sheet.addRow({
product: 'TOTAL',
total: { formula: `SUM(D2:D${lastRow - 1})` }
});
// 货币格式化
sheet.getColumn('price').numFmt = '$#,##0.00';
sheet.getColumn('total').numFmt = '$#,##0.00';
await workbook.xlsx.writeFile('report.xlsx');
创建电子表格 (Python - openpyxl)
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill
wb = Workbook()
ws = wb.active
ws.title = 'Sales Report'
# 标题
headers = ['Product', 'Quantity', 'Price', 'Total']
for col, header in enumerate(headers, 1):
cell = ws.cell(row=1, column=col, value=header)
cell.font = Font(bold=True, color='FFFFFF')
cell.fill = PatternFill(start_color='4472C4', end_color='4472C4', fill_type='solid')
# 数据
data = [
('Widget A', 100, 10),
('Widget B', 50, 25),
('Widget C', 75, 15),
]
for row_idx, (product, qty, price) in enumerate(data, 2):
ws.cell(row=row_idx, column=1, value=product)
ws.cell(row=row_idx, column=2, value=qty)
ws.cell(row=row_idx, column=3, value=price)
ws.cell(row=row_idx, column=4, value=f'=B{row_idx}*C{row_idx}')
# 总计行
total_row = len(data) + 2
ws.cell(row=total_row, column=1, value='TOTAL')
ws.cell(row=total_row, column=4, value=f'=SUM(D2:D{total_row-1})')
# 数字格式化
for row in range(2, total_row + 1):
ws.cell(row=row, column=3).number_format = '$#,##0.00'
ws.cell(row=row, column=4).number_format = '$#,##0.00'
wb.save('report.xlsx')
读取和分析 (Python - pandas)
import pandas as pd
# 读取Excel文件
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 分析
summary = df.groupby('Category').agg({
'Sales': 'sum',
'Quantity': 'mean'
}).round(2)
# 写入Excel带格式化
with pd.ExcelWriter('analysis.xlsx', engine='openpyxl') as writer:
df.to_excel(writer, sheet_name='Raw Data', index=False)
summary.to_excel(writer, sheet_name='Summary')
# 自动调整列宽
for sheet in writer.sheets.values():
for column in sheet.columns:
max_length = max(len(str(cell.value)) for cell in column)
sheet.column_dimensions[column[0].column_letter].width = max_length + 2
添加图表 (Python)
from openpyxl.chart import BarChart, Reference
chart = BarChart()
chart.title = 'Sales by Product'
chart.x_axis.title = 'Product'
chart.y_axis.title = 'Sales'
# 数据范围(假设列D包含系列,行1是标题)
max_row = ws.max_row
data_ref = Reference(ws, min_col=4, min_row=1, max_row=max_row, max_col=4)
categories = Reference(ws, min_col=1, min_row=2, max_row=max_row)
chart.add_data(data_ref, titles_from_data=True)
chart.set_categories(categories)
chart.shape = 4
ws.add_chart(chart, 'F2')
条件格式化
from openpyxl.formatting.rule import ColorScaleRule, FormulaRule
from openpyxl.styles import PatternFill
# 颜色比例(热图)
ws.conditional_formatting.add(
'D2:D100',
ColorScaleRule(
start_type='min', start_color='FF0000',
end_type='max', end_color='00FF00'
)
)
# 高亮超过阈值的单元格
red_fill = PatternFill(start_color='FFCCCC', fill_type='solid')
ws.conditional_formatting.add(
'D2:D100',
FormulaRule(formula=['D2>1000'], fill=red_fill)
)
常用公式参考
| 目的 | 公式 | 示例 |
|---|---|---|
| 求和 | =SUM(range) |
=SUM(A1:A10) |
| 平均 | =AVERAGE(range) |
=AVERAGE(B2:B100) |
| 计数 | =COUNT(range) |
=COUNT(C:C) |
| 条件求和 | =SUMIF(range,criteria,sum_range) |
=SUMIF(A:A,"Widget",B:B) |
| 查找 | =VLOOKUP(value,range,col,FALSE) |
=VLOOKUP(A2,Data!A:C,3,FALSE) |
| 如果 | =IF(condition,true,false) |
=IF(B2>100,"High","Low") |
| 百分比 | =value/total |
=B2/SUM(B:B) |
决策树
Excel任务:[你需要什么?]
├─ 创建新的电子表格?
│ ├─ 简单数据导出 → pandas to_excel()
│ ├─ 格式化报告 → exceljs 或 openpyxl
│ └─ 带图表 → openpyxl charts模块
│
├─ 读取/分析现有?
│ ├─ 数据分析 → pandas read_excel()
│ ├─ 保留格式化 → openpyxl load_workbook()
│ └─ 快速解析 → xlsx (SheetJS)
│
├─ 修改现有?
│ ├─ 添加数据 → openpyxl (保留格式化)
│ └─ 更新公式 → openpyxl
│
└─ 复杂功能?
├─ 数据透视表 → pandas摘要表或xlwings (原生数据透视表)
├─ 数据验证 → openpyxl DataValidation
└─ 宏 → 仅保留;使用xlwings进行Excel自动化
做/避免 (2026年1月)
做
- 分离输入/计算/输出(标签或清晰部分)。
- 保持假设明确(值+单位+来源+日期)。
- 为导入数据添加控制总计和核对检查。
避免
- 在公式中硬编码常数而没有文档化假设。
- 隐藏行/列改变结果而没有文档。
- 共享包含客户PII或秘密的工作表。
良好外观
- 结构:清晰的输入/假设、计算和输出分离(标签或部分)。
- 完整性:没有
#REF!、断裂的命名范围或公式中隐藏的硬编码常数。 - 可追溯性:每个关键输出都追溯到标记的输入(单位+来源+日期)。
- 检查:控制总计、核对和错误标志,失败时大声。
- 审查:使用
assets/spreadsheet-model-review-checklist.md进行独立审查通过。
可选:AI/自动化
仅在明确请求且政策合规时使用。
- 生成第一轮公式/图表;人类验证正确性和边缘情况。
- 起草文档标签(假设、词汇表);不发明源数据。
导航
资源
- references/excel-formulas.md — 公式参考和模式
- references/excel-formatting.md — 样式、条件格式化
- references/excel-charts.md — 图表类型和定制
- data/sources.json — 库文档链接
模板
- assets/financial-report.md — 财务报表模板
- assets/data-dashboard.md — 带图表的仪表板
- assets/spreadsheet-model-review-checklist.md — 模型QA检查表(假设、公式、可追溯性)
相关技能
- …/document-pdf/SKILL.md — 从数据生成PDF
- …/ai-ml-data-science/SKILL.md — 数据分析模式
- …/data-sql-optimization/SKILL.md — 数据库到Excel工作流