文
文档 XLSX
作者:技能派办公效率v1
创建、编辑、审计和提取 Excel 电子表格(.xlsx):生成报表/导出数据、应用公式/格式/图表/数据验证、解析已有工作簿,防范电子表格风险(公式注入、断链、隐藏行)。支持 ExcelJS、openpyxl、pandas、XlsxWriter 和 SheetJS。触发词:Excel、电子表格、xlsx、报表导出、数据分析表
下载量
263
点赞
66
价格
免费
技能文档
---
name: document-xlsx
title: 文档 XLSX
category: 办公效率
description: "创建、编辑、审计和提取 Excel 电子表格(.xlsx):生成报表/导出数据、应用公式/格式/图表/数据验证、解析已有工作簿,防范电子表格风险(公式注入、断链、隐藏行)。支持 ExcelJS、openpyxl、pandas、XlsxWriter 和 SheetJS。触发词:Excel、电子表格、xlsx、报表导出、数据分析表"
---
# 文档 XLSX 技能 — 快速参考
本技能支持以编程方式创建、编辑和分析 Excel 电子表格。当用户需要生成数据报表、财务模型、自动化 Excel 工作流或处理电子表格数据时,应用以下模式。
**现代最佳实践(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` 字段;将其写为文本值并验证/清理导出中使用的用户数据。
---
## 技能工作流
### 步骤1:创建电子表格(Node.js - ExcelJS)
```typescript
import ExcelJS from 'exceljs';
const workbook = new ExcelJS.Workbook();
const sheet = workbook.addWorksheet('Sales Report');
// Headers with styling
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 },
];
// Style header row
sheet.getRow(1).font = { bold: true };
sheet.getRow(1).fill = {
type: 'pattern',
pattern: 'solid',
fgColor: { argb: 'FF4472C4' }
};
// Add data
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}` }
});
});
// Add totals row
const lastRow = sheet.rowCount + 1;
sheet.addRow({
product: 'TOTAL',
total: { formula: `SUM(D2:D${lastRow - 1})` }
});
// Currency formatting
sheet.getColumn('price').numFmt = '$#,##0.00';
sheet.getColumn('total').numFmt = '$#,##0.00';
await workbook.xlsx.writeFile('report.xlsx');
```
### 步骤2:创建电子表格(Python - openpyxl)
```python
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill
wb = Workbook()
ws = wb.active
ws.title = 'Sales Report'
# Headers
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
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}')
# Totals row
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})')
# Number formatting
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')
```
### 步骤3:读取与分析(Python - pandas)
```python
import pandas as pd
# Read Excel file
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# Analysis
summary = df.groupby('Category').agg({
'Sales': 'sum',
'Quantity': 'mean'
}).round(2)
# Write to Excel with formatting
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')
# Auto-adjust column widths
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
```
### 步骤4:添加图表(Python)
```python
from openpyxl.chart import BarChart, Reference
chart = BarChart()
chart.title = 'Sales by Product'
chart.x_axis.title = 'Product'
chart.y_axis.title = 'Sales'
# Data range (assumes column D contains the series and row 1 is headers)
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')
```
### 步骤5:条件格式
```python
from openpyxl.formatting.rule import ColorScaleRule, FormulaRule
from openpyxl.styles import PatternFill
# Color scale (heatmap)
ws.conditional_formatting.add(
'D2:D100',
ColorScaleRule(
start_type='min', start_color='FF0000',
end_type='max', end_color='00FF00'
)
)
# Highlight cells above threshold
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)` |
---
## 决策树
```text
Excel 任务: [你需要做什么?]
├─ 创建新电子表格?
│ ├─ 简单数据导出 → pandas to_excel()
│ ├─ 格式化报表 → exceljs 或 openpyxl
│ └─ 带图表 → openpyxl 图表模块
│
├─ 读取/分析已有文件?
│ ├─ 数据分析 → pandas read_excel()
│ ├─ 保留格式 → openpyxl load_workbook()
│ └─ 快速解析 → xlsx (SheetJS)
│
├─ 修改已有文件?
│ ├─ 添加数据 → openpyxl(保留格式)
│ └─ 更新公式 → openpyxl
│
└─ 复杂功能?
├─ 数据透视表 → pandas 汇总表或 xlwings(原生透视表)
├─ 数据验证 → openpyxl DataValidation
└─ 宏 → 仅保留;使用 xlwings 进行 Excel 自动化
```
---
## 规范与禁忌
### 推荐做法
- 分离输入/计算/输出(选项卡或清晰分区)。
- 保持假设显式(值 + 单位 + 来源 + 日期)。
- 为导入数据添加控制总计和核对检查。
### 避免做法
- 在公式中使用无文档记录的硬编码常量。
- 隐藏改变结果的行/列而不加说明。
- 共享包含客户 PII 或密钥的电子表格。
## 质量标准
- 结构:清晰的输入/假设、计算和输出分离(选项卡或分区)。
- 完整性:无 `#REF!`、断裂的命名范围或隐藏在公式中的硬编码常量。
- 可追溯性:每个关键输出都可追溯到有标签的输入(单位 + 来源 + 日期)。
- 检查:控制总计、核对和错误标志能明确报错。
- 审查:独立审查环节,使用模型 QA 检查清单(假设、公式、可追溯性)。
## 可选:AI / 自动化
仅在明确请求且符合策略时使用。
- 生成初稿公式/图表;人工验证正确性和边界情况。
- 起草文档选项卡(假设、术语表);不编造来源数据。使用说明
# 文档 XLSX 以编程方式创建、编辑和分析 Excel 电子表格,支持公式、图表、条件格式和数据验证。 ## 使用 对话中直接描述需求即可触发: ```text 帮我生成一份销售数据 Excel 报表,包含产品、数量、单价和合计列 ``` ```text 读取 data.xlsx 并按类别汇总销售额 ``` ## 工作原理 根据任务自动选择合适的库: - **创建报表**:ExcelJS(Node.js)或 openpyxl(Python),支持样式、公式和图表 - **数据分析**:pandas + openpyxl,DataFrame 直接导出为格式化 Excel - **读取解析**:SheetJS(Node.js)或 pandas(Python),快速提取数据 - **条件格式与图表**:openpyxl 内置支持热力图、柱状图等可视化 内置安全防护:防范公式注入、外部链接风险和宏安全处理。
支持平台:Qoder · QoderWork · Claude · Codex 等 AI 编程助手