Excel文档处理技能 document-xlsx

这个技能用于程序化创建、编辑和分析Excel电子表格,支持多种库如ExcelJS、openpyxl、pandas等,适用于数据报告、财务模型和自动化工作流。关键词:Excel, 电子表格, 数据分析, 报告生成, 自动化, 编程处理。

数据分析 0 次安装 0 次浏览 更新于 3/7/2026

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/自动化

仅在明确请求且政策合规时使用。

  • 生成第一轮公式/图表;人类验证正确性和边缘情况。
  • 起草文档标签(假设、词汇表);不发明源数据。

导航

资源

模板

相关技能