电
电子表格处理
作者:技能派办公效率v1
创建、编辑和分析 Excel 电子表格(.xlsx/.xlsm/.csv/.tsv),支持公式、格式化、数据分析和可视化。当用户需要创建带公式的电子表格、读取或分析表格数据、修改已有表格并保留公式、进行数据可视化时触发。触发词:Excel、XLSX、电子表格、表格处理、数据分析
下载量
270
点赞
68
价格
免费
技能文档
---
name: document-skillsxlsx
title: 电子表格处理
category: 办公效率
description: "创建、编辑和分析 Excel 电子表格(.xlsx/.xlsm/.csv/.tsv),支持公式、格式化、数据分析和可视化。当用户需要创建带公式的电子表格、读取或分析表格数据、修改已有表格并保留公式、进行数据可视化时触发。触发词:Excel、XLSX、电子表格、表格处理、数据分析"
---
# 电子表格处理
## 语言与质量标准
使用用户所用的语言回复。保持简洁,优先节省 token,未解决的问题列在末尾。
---
# 输出要求
## 所有 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 格式;表头始终标注单位("收入(百万元)")
- **零值**:用数字格式将零显示为 "-",包括百分比(如 "$#,##0;($#,##0);-")
- **百分比**:默认 0.0%(一位小数)
- **倍数**:0.0x 格式(如 EV/EBITDA、P/E)
- **负数**:用括号 (123) 而非负号 -123
### 公式构建规则
#### 假设放置
- 所有假设(增长率、利润率、倍数等)放在独立单元格
- 公式中使用单元格引用而非硬编码值
- 示例:用 =B5*(1+$B$6) 而非 =B5*1.05
#### 公式错误预防
- 检查所有单元格引用是否正确
- 检查范围是否存在偏移一位的错误
- 确保所有预测期公式一致
- 用边界值测试(零值、负数)
- 确认无意外循环引用
#### 硬编码值的文档要求
- 在单元格批注或相邻单元格中注明。格式:"来源:[系统/文件],[日期],[具体引用],[URL]"
- 示例:
- "来源:公司 10-K,FY2024,第 45 页,收入附注,[SEC EDGAR URL]"
- "来源:Bloomberg 终端,2025/8/15,AAPL US Equity"
# 电子表格创建、编辑与分析
## 技能工作流
### 步骤1:选择工具
根据任务类型选择工具:
- **pandas**:数据分析、批量操作、简单导出
- **openpyxl**:复杂格式化、公式、Excel 特有功能
### 步骤2:读取与分析数据
使用 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)
```
### 步骤3:创建或加载文件
**关键原则:使用 Excel 公式而非 Python 硬编码计算值。** 确保电子表格保持动态可更新。
#### 错误做法 — 硬编码计算值
```python
# 错误:在 Python 中计算后硬编码结果
total = df['Sales'].sum()
sheet['B10'] = total # 硬编码 5000
growth = (df.iloc[-1]['Revenue'] - df.iloc[0]['Revenue']) / df.iloc[0]['Revenue']
sheet['C5'] = growth # 硬编码 0.15
```
#### 正确做法 — 使用 Excel 公式
```python
# 正确:让 Excel 计算求和
sheet['B10'] = '=SUM(B2:B9)'
# 正确:Excel 公式计算增长率
sheet['C5'] = '=(C4-C2)/C2'
# 正确:Excel 函数计算平均值
sheet['D20'] = '=AVERAGE(D2:D19)'
```
### 步骤4:创建新文件
```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:编辑已有文件
```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_name}")
# 修改单元格
sheet['A1'] = '新值'
sheet.insert_rows(2) # 在第 2 行插入
sheet.delete_cols(3) # 删除第 3 列
# 新建工作表
new_sheet = wb.create_sheet('新表')
new_sheet['A1'] = '数据'
wb.save('modified.xlsx')
```
### 步骤6:重新计算公式(使用公式时必须执行)
openpyxl 创建或修改的文件中公式仅保存为字符串,不包含计算值。使用 recalc.py 脚本重新计算:
```bash
python recalc.py output.xlsx 30
```
脚本功能:
- 首次运行自动配置 LibreOffice
- 重新计算所有工作表中的所有公式
- 扫描所有单元格检查 Excel 错误
- 返回包含详细错误位置和计数的 JSON
- 支持 Linux 和 macOS
#### 解读 recalc.py 输出
脚本返回 JSON 格式的错误详情:
```json
{
"status": "success",
"total_errors": 0,
"total_formulas": 42,
"error_summary": {
"#REF!": {
"count": 2,
"locations": ["Sheet1!B5", "Sheet1!C10"]
}
}
}
```
如果 `status` 为 `errors_found`,根据 `error_summary` 中的错误类型和位置修复后重新计算。
### 步骤7:验证与排错
#### 基本验证
- 测试 2-3 个样本引用,确认能获取正确值
- 确认列映射正确(如第 64 列 = BL,不是 BK)
- 记住 Excel 行号从 1 开始(DataFrame 第 5 行 = Excel 第 6 行)
#### 常见陷阱
- 用 `pd.notna()` 检查空值
- 财务数据常在 50 列以后
- 搜索所有匹配项而非仅第一个
- 检查公式中除数是否为零(#DIV/0!)
- 验证所有单元格引用指向正确位置(#REF!)
- 跨表引用使用正确格式(Sheet1!A1)
#### 公式测试策略
- 先在 2-3 个单元格测试公式再大范围应用
- 检查公式引用的所有单元格是否存在
- 测试零值、负值和极大值等边界情况
## 最佳实践
### 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` 写入
- 公式会被保留但不会计算——用 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'])`
### 代码风格
- 编写简洁的 Python 代码,不加多余注释
- 避免冗长的变量名和多余操作
- 避免不必要的 print 语句
- 在 Excel 单元格中为复杂公式或重要假设添加批注
- 为硬编码值注明数据来源使用说明
# 电子表格处理
创建、编辑和分析 Excel 电子表格,支持公式、格式化、数据分析和可视化。
## 使用
```python
from openpyxl import Workbook
wb = Workbook()
sheet = wb.active
sheet['A1'] = '产品'
sheet['B1'] = '销售额'
sheet['A2'] = '合计'
sheet['B2'] = '=SUM(B3:B100)'
wb.save('报表.xlsx')
```
## 工作原理
基于 pandas 和 openpyxl 实现电子表格全流程操作:
- **读取分析**:pandas 读取数据并生成统计摘要
- **创建编辑**:openpyxl 写入公式、格式化和多工作表操作
- **公式计算**:通过 LibreOffice 自动重算所有公式并检测错误
- **质量保障**:交付前扫描零公式错误,保留已有模板格式
## 适用场景
- 创建带公式和格式化的新表格
- 读取和分析已有表格数据
- 修改表格并保留原有公式
- 财务模型的颜色编码与数字格式
- 数据可视化与统计分析支持平台:Qoder · QoderWork · Claude · Codex 等 AI 编程助手