据 AlphaMoat 统计,截至 2026-09,Excel Studio 累计下载 4,224 次、获 4 个星标,在全部 5,078 个 AI 技能中排名第 2,360 位,在「办公效率」分类(435 个)中排名第 199 位。
| 平台 | 累计安装 | 累计下载 | 星标 | 评论 |
|---|---|---|---|---|
| ClawHub ↗ | 82 | 3,477 | 3 | - |
| SkillHub ↗ | 254 | 4,224 | 4 | — |
各平台的计数口径不同,统计时间不一致。
根据结构化需求生成表格、报表、图表和财务模型,支持公式、格式设置及多个工作表。产物格式和图表应按用户给定的数据与要求生成,使用前请检查公式、数值和布局。 随附工作流明确支持的输出格式是 XLSX;如需 XLS 或 CSV,应先核验实际格式。使用前审核依赖版本,并将不可信的公式样式单元格值按文本处理,除非明确需要执行公式。
资料发布于 2026-10-27
以下是根据技能文档生成的示例,不代表实际运行结果。
2026-09 起统计方法调整:同名技能按作者分别统计,并覆盖全部技能。图中虚线为调整前的月份,与之后的数据不直接比较,也不计算跨越调整的增长。
| 月份 | 累计下载 | 环比 | 星标 |
|---|---|---|---|
| 2026-09 | 4,224 | — | 4 |
| 2026-08 | 3,393 | +11.8% | 4 |
| 2026-07 | 3,034 | +33.6% | 4 |
| 2026-06 | 2,271 | +19.8% | 3 |
| 2026-05 | 1,896 | — | 3 |
| 2026-03 | 808 | — | 2 |
以下是作者发布的原始文件,按纯文本显示,本站未做修改或审核;其中的链接不可点击,命令请核实后再运行。抓取于 2026-10-23。
---
name: excel-studio
description: Professional Excel spreadsheet generator. Use when user needs to create data tables, reports, charts, financial models, or any structured data in Excel format. Supports .xlsx, .xls, .csv formats with multi-language, charts, formulas, and formatting. Excel电子表格生成、数据分析、财务报表。
version: 1.0.0
license: MIT-0
metadata: {"openclaw": {"emoji": "📊", "requires": {"bins": ["python3"]}}}
dependencies: "pip install openpyxl xlwt"
---
# Excel Studio
Professional Excel spreadsheet generator with full formatting, charts, formulas, and multi-sheet support.
## Features
- 📊 **Multi-Format**: Output as .xlsx, .xls, or .csv
- 📈 **Charts & Graphs**: Bar, line, pie, scatter charts
- 🔢 **Formulas**: SUM, AVERAGE, VLOOKUP, and more
- 🎨 **Professional Formatting**: Colors, fonts, borders, alignment
- 📑 **Multi-Sheet**: Multiple worksheets with cross-references
- 🌍 **Multi-Language**: Chinese, English, Japanese, etc.
- ✅ **Cross-Platform**: Windows, macOS, Linux
- 📱 **Excel Compatible**: Works with Excel, WPS, LibreOffice
## Trigger Conditions
- "帮我做Excel" / "Create an Excel file"
- "生成表格" / "Generate spreadsheet"
- "做数据分析" / "Create data analysis"
- "制作财务报表" / "Create financial report"
- "excel-studio"
## Document Types
### Business (商务)
- 销售报表
- 财务报表
- 预算表
- 库存管理
- 项目跟踪
### Data Analysis (数据分析)
- 数据汇总
- 数据透视
- 趋势分析
- 对比分析
### Financial (财务)
- 资产负债表
- 利润表
- 现金流量表
- 预算对比
### Personal (个人)
- 记账本
- 日程表
- 成绩单
- 清单
---
## Step 1: Understand Requirements
```
请提供以下信息:
文档类型:(报表/数据分析/财务/其他)
格式要求:(xlsx/xls/csv)
Sheet数量:
数据内容:
图表需求:(柱状图/折线图/饼图/无)
语言:(中文/英文)
特殊要求:(公式/条件格式/数据验证等)
```
---
## Step 2: Generate Excel
### Python Script Template
```python
python3 << 'PYEOF'
import os
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side, numbers
from openpyxl.chart import BarChart, LineChart, PieChart, Reference
from openpyxl.utils import get_column_letter
from datetime import datetime
class ExcelGenerator:
def __init__(self):
self.wb = Workbook()
self.sheets = {}
def add_sheet(self, name, active=False):
"""Add a new worksheet"""
if active:
ws = self.wb.active
ws.title = name
else:
ws = self.wb.create_sheet(name)
self.sheets[name] = ws
return ws
def get_sheet(self, name):
"""Get worksheet by name"""
return self.sheets.get(name, self.wb.active)
def set_cell(self, sheet_name, row, col, value, format_type=None):
"""Set cell value with optional formatting"""
ws = self.get_sheet(sheet_name)
cell = ws.cell(row=row, column=col, value=value)
if format_type:
self.apply_format(cell, format_type)
return cell
def apply_format(self, cell, format_type):
"""Apply formatting to cell"""
formats = {
'header': {
'font': Font(bold=True, size=12, color='FFFFFF'),
'fill': PatternFill(start_color='3182CE', end_color='3182CE', fill_type='solid'),
'alignment': Alignment(horizontal='center', vertical='center')
},
'title': {
'font': Font(bold=True, size=16),
'alignment': Alignment(horizontal='center')
},
'number': {
'number_format': '#,##0.00'
},
'percent': {
'number_format': '0.00%'
},
'date': {
'number_format': 'YYYY-MM-DD'
},
'currency': {
'number_format': '¥#,##0.00'
},
'border': {
'border': Border(
left=Side(style='thin'),
right=Side(style='thin'),
top=Side(style='thin'),
bottom=Side(style='thin')
)
}
}
if format_type in formats:
for key, value in formats[format_type].items():
setattr(cell, key, value)
def write_table(self, sheet_name, start_row, start_col, headers, data,
header_format=True, border=True):
"""Write a formatted table"""
ws = self.get_sheet(sheet_name)
# Write headers
if headers:
for i, header in enumerate(headers):
cell = ws.cell(row=start_row, column=start_col + i, value=header)
if header_format:
self.apply_format(cell, 'header')
if border:
self.apply_format(cell, 'border')
# Write data
for row_idx, row_data in enumerate(data, start=start_row + 1):
for col_idx, value in enumerate(row_data, start=start_col):
cell = ws.cell(row=row_idx, column=col_idx, value=value)
if border:
self.apply_format(cell, 'border')
# Auto-format numbers
if isinstance(value, (int, float)):
cell.number_format = '#,##0.00'
return start_row, start_col, start_row + len(data), start_col + len(headers) - 1
def add_chart(self, sheet_name, chart_type, data_range, title,
categories_range=None, position='E2'):
"""Add a chart to the sheet"""
ws = self.get_sheet(sheet_name)
charts = {
'bar': BarChart(),
'line': LineChart(),
'pie': PieChart()
}
chart = charts.get(chart_type, BarChart())
chart.title = title
chart.style = 10
# Add data
data = Reference(ws, min_col=data_range[0], min_row=data_range[1],
max_col=data_range[2], max_row=data_range[3])
chart.add_data(data, titles_from_data=True)
# Add categories if provided
if categories_range:
cats = Reference(ws, min_col=categories_range[0],
min_row=categories_range[1],
max_col=categories_range[2],
max_row=categories_range[3])
chart.set_categories(cats)
# Add chart to sheet
ws.add_chart(chart, position)
return chart
def set_column_width(self, sheet_name, col, width):
"""Set column width"""
ws = self.get_sheet(sheet_name)
ws.column_dimensions[get_column_letter(col)].width = width
def auto_column_width(self, sheet_name):
"""Auto-adjust column widths"""
ws = self.get_sheet(sheet_name)
for col in ws.columns:
max_length = 0
column = col[0].column_letter
for cell in col:
try:
if len(str(cell.value)) > max_length:
max_length = len(str(cell.value))
except:
pass
adjusted_width = min(max_length + 2, 50)
ws.column_dimensions[column].width = adjusted_width
def add_formula(self, sheet_name, row, col, formula):
"""Add a formula to a cell"""
ws = self.get_sheet(sheet_name)
ws.cell(row=row, column=col, value=formula)
def merge_cells(self, sheet_name, start_row, start_col, end_row, end_col):
"""Merge cells"""
ws = self.get_sheet(sheet_name)
ws.merge_cells(start_row=start_row, start_column=start_col,
end_row=end_row, end_column=end_col)
def save(self, output_path):
"""Save workbook"""
self.wb.save(output_path)
return output_path
# Example: Create a sales report
def create_sales_report():
gen = ExcelGenerator()
# Sheet 1: Sales Data
ws1 = gen.add_sheet('销售数据', active=True)
# Title
gen.merge_cells('销售数据', 1, 1, 1, 6)
title_cell = gen.set_cell('销售数据', 1, 1, '2026年第一季度销售报告')
gen.apply_format(title_cell, 'title')
# Headers
headers = ['月份', '产品A', '产品B', '产品C', '总计', '增长率']
gen.write_table('销售数据', 3, 1, headers, [])
# Data
data = [
['1月', 150000, 230000, 180000, None, None],
['2月', 180000, 250000, 200000, None, None],
['3月', 220000, 280000, 230000, None, None],
]
for i, row in enumerate(data, start=4):
for j, value in enumerate(row, start=1):
gen.set_cell('销售数据', i, j, value)
# Add formulas
for row in range(4, 7):
gen.add_formula('销售数据', row, 5, f'=SUM(B{row}:D{row})')
if row > 4:
gen.add_formula('销售数据', row, 6, f'=(E{row}-E{row-1})/E{row-1}')
# Total row
gen.set_cell('销售数据', 7, 1, '总计')
gen.apply_format(gen.get_sheet('销售数据').cell(row=7, column=1), 'header')
for col in range(2, 6):
gen.add_formula('销售数据', 7, col, f'=SUM({get_column_letter(col)}4:{get_column_letter(col)}6)')
# Auto-width
gen.auto_column_width('销售数据')
# Add chart
gen.add_chart('销售数据', 'bar', (1, 3, 4, 6), '月度销售对比',
categories_range=(1, 4, 1, 6), position='A9')
# Sheet 2: Summary
ws2 = gen.add_sheet('汇总分析')
gen.set_cell('汇总分析', 1, 1, '产品销售占比')
gen.apply_format(gen.get_sheet('汇总分析').cell(row=1, column=1), 'title')
summary_headers = ['产品', '销售额', '占比']
gen.write_table('汇总分析', 3, 1, summary_headers, [])
summary_data = [
['产品A', 550000, None],
['产品B', 760000, None],
['产品C', 610000, None],
]
for i, row in enumerate(summary_data, start=4):
gen.set_cell('汇总分析', i, 1, row[0])
gen.set_cell('汇总分析', i, 2, row[1])
gen.add_formula('汇总分析', i, 3, f'=B{i}/SUM(B4:B6)')
gen.apply_format(gen.get_sheet('汇总分析').cell(row=i, column=3), 'percent')
# Add pie chart
gen.add_chart('汇总分析', 'pie', (1, 3, 2, 6), '产品销售占比',
position='A8')
return gen
# Generate
output_dir = os.environ.get('OPENCLAW_WORKSPACE', os.getcwd())
output_path = os.path.join(output_dir, 'sales_report.xlsx')
gen = create_sales_report()
gen.save(output_path)
print(f"✅ Excel已生成:{output_path}")
print(f"")
print(f"📊 包含内容:")
print(f" - 2个工作表(销售数据/汇总分析)")
print(f" - 专业格式(表头/边框/数字格式)")
print(f" - 自动公式(SUM/增长率)")
print(f" - 柱状图+饼图")
print(f" - 自动列宽调整")
PYEOF
```
---
## Format Types (格式类型)
### Cell Formats
```python
FORMATS = {
# 对齐
'center': Alignment(horizontal='center', vertical='center'),
'left': Alignment(horizontal='left'),
'right': Alignment(horizontal='right'),
# 数字格式
'number': '#,##0.00',
'integer': '#,##0',
'percent': '0.00%',
'currency': '¥#,##0.00',
'date': 'YYYY-MM-DD',
'datetime': 'YYYY-MM-DD HH:MM:SS',
# 字体
'bold': Font(bold=True),
'title': Font(bold=True, size=16),
'header': Font(bold=True, size=12, color='FFFFFF'),
# 填充
'blue_fill': PatternFill(start_color='3182CE', fill_type='solid'),
'green_fill': PatternFill(start_color='48BB78', fill_type='solid'),
'red_fill': PatternFill(start_color='F56565', fill_type='solid'),
'yellow_fill': PatternFill(start_color='ECC94B', fill_type='solid'),
}
```
---
## Chart Types (图表类型)
| 类型 | 代码 | 适用场景 |
|------|------|----------|
| 柱状图 | `bar` | 对比数据 |
| 折线图 | `line` | 趋势分析 |
| 饼图 | `pie` | 占比分析 |
| 散点图 | `scatter` | 相关性 |
---
## Formula Support (公式支持)
### Common Formulas
```python
# 求和
'=SUM(A1:A10)'
# 平均值
'=AVERAGE(A1:A10)'
# 最大/最小
'=MAX(A1:A10)'
'=MIN(A1:A10)'
# 计数
'=COUNT(A1:A10)'
'=COUNTA(A1:A10)'
# 条件
'=IF(A1>100, "高", "低")'
# 查找
'=VLOOKUP(A1, B:C, 2, FALSE)'
# 百分比变化
'=(B1-A1)/A1'
```
---
## Multi-Sheet Operations (多Sheet操作)
### Cross-Sheet Reference
```python
# 引用其他Sheet的数据
'=Sheet1!A1'
# 跨Sheet求和
'=SUM(Sheet1:Sheet3!A1)'
# 条件汇总
'=SUMIF(Sheet1!A:A, "条件", Sheet1!B:B)'
```
---
## Security Notes
- ✅ No network calls or external endpoints
- ✅ No credentials or API keys required
- ✅ Local file processing only
- ✅ Open source dependencies (openpyxl, xlwt)
- ✅ No data uploaded to external servers
---
## Notes
- 使用openpyxl支持.xlsx格式
- 使用xlwt支持.xls格式
- CSV使用内置csv模块
- 支持中文和其他Unicode字符
- 跨平台兼容Excel/WPS/LibreOffice
通过 MCP 在腾讯文档里新建、编辑与管理在线文档的完整操作手册。
在保留公式、格式与工作簿结构的前提下创建、检查并修改 Excel 文件的技能。
处理 Word 与 DOCX 文档的作业规范,重点是改完之后样式、编号与版式不跑偏。
通过命令行访问 Gmail、日历、Drive、通讯录、Sheets 与 Docs。
PDF和图片文字提取 将文档文字、表格与扫描页识别整理为文本结果。
按主题与风格自动生成 PPT 文件的技能。
通过 kdocs-cli 操作金山文档云文档的官方技能。
用自然语言指令改 PDF 指定页的小工具。
数据月份:2026-09 · 下载/星标/安装数聚合自公开技能注册库(ClawHub、SkillHub),按月更新。口径说明见数据方法。