excel-report-generator
npx skills add https://github.com/wwwzhouhui/skills_collection --skill excel-report-generator
Agent 安装分布
Skill 文档
Excel Report Generator
èªå¨å Excel æ¥è¡¨çæå·¥å ·ï¼æ¯æä»å¤ç§æ°æ®æºçæä¸ä¸ç Excel æ¥åã
åè½æ¦è¿°
è¿ä¸ª Skill å¯ä»¥å¸®å©ä½ ï¼
- ð ä» CSVãæ°æ®åºæ Python æ°æ®ç»æçæ Excel æ¥è¡¨
- ð å建å å«å¾è¡¨ãæ ¼å¼ååå ¬å¼çæ°æ®åææ¥å
- ð åºäºæ¨¡æ¿å¡«å æ°æ®çæä¸å¡æ¥å
- ð¾ å°ç³»ç»æ°æ®æ¹é导åºä¸ºæ ¼å¼åç Excel æä»¶
- ð¨ åºç¨ä¸ä¸çæ ·å¼ãé¢è²åæ¡ä»¶æ ¼å¼
æ ¸å¿ææ¯æ
- pandas: æ°æ®å¤çååæ
- openpyxl: Excel æä»¶è¯»ååæ ¼å¼å
- xlsxwriter: é«çº§å¾è¡¨åæ ¼å¼æ¯æï¼å¯éï¼
使ç¨åºæ¯
1. æ°æ®åææ¥è¡¨
ä»åå§æ°æ®çæå å«ç»è®¡åæãéè§è¡¨åå¯è§åå¾è¡¨çç»¼åæ¥åã
示ä¾è¯·æ±:
- “帮æä»è¿ä¸ª CSV çæéå®åææ¥è¡¨”
- “å建ä¸ä¸ªå å«æåº¦è¶å¿å¾çæ°æ®åæ Excel”
- “çæå¸¦æç»è®¡æ±æ»çè´¢å¡æ¥è¡¨”
2. ä¸å¡æ¥å
å®æçææ ååçä¸å¡æ¥åï¼å¦é宿¥åãKPI 仪表æ¿çã
示ä¾è¯·æ±:
- “çææ¬æçéå®ä¸ç»©æ¥å”
- “å建 KPI è·è¸ªæ¥è¡¨”
- “导åºå£åº¦ä¸å¡æ»ç» Excel”
3. æ°æ®å¯¼åº
å°æ°æ®åºæ¥è¯¢ç»ææç³»ç»æ°æ®å¯¼åºä¸ºæ ¼å¼åç Excel æä»¶ã
示ä¾è¯·æ±:
- “æç¨æ·æ°æ®å¯¼åºå° Excel”
- “å°æ°æ®åºæ¥è¯¢ç»æä¿å为 Excel æä»¶”
- “导åºå¤ä¸ªå·¥ä½è¡¨çæ°æ®é”
4. 模æ¿å¡«å
åºäºé¢å®ä¹ç Excel 模æ¿å¡«å å¨ææ°æ®ã
示ä¾è¯·æ±:
- “使ç¨è¿ä¸ªæ¨¡æ¿çææ¥å”
- “å¡«å Excel 模æ¿ä¸çæ°æ®”
- “æ¹éçæåºäºæ¨¡æ¿çå票”
ä½¿ç¨æ¹æ³
åºæ¬å·¥ä½æµç¨
- å夿°æ®æº: CSV æä»¶ãpandas DataFrameãæ°æ®åºè¿æ¥æ Python åå ¸
- å®ä¹æ¥è¡¨éæ±: æè¿°æéçæ ¼å¼ãå¾è¡¨ãæ ·å¼
- çææ¥è¡¨: èªå¨åå»ºæ ¼å¼åç Excel æä»¶
- éªè¯è¾åº: æ£æ¥çæçæä»¶æ¯å¦ç¬¦åè¦æ±
å½ä»¤ç¤ºä¾
ä» CSV çææ¥è¡¨:
è¯·ä» sales_data.csv çæä¸ä¸ªéå®åææ¥è¡¨ï¼å
å«ï¼
- æäº§ååç±»çé宿±æ»
- æåº¦éå®è¶å¿å¾
- Top 10 产åæå
ä» DataFrame çææ¥è¡¨:
ææä¸ä¸ª pandas DataFrameï¼å¸®æçæ Excel æ¥è¡¨ï¼å
æ¬ï¼
- æ°æ®éè§è¡¨
- æ¡ä»¶æ ¼å¼é«äº®å¼å¸¸å¼
- èªå¨çéåå»ç»é¦è¡
ä½¿ç¨æ¨¡æ¿:
åºäº templates/monthly_report.xlsx 模æ¿ï¼å¡«å
å½ææ°æ®å¹¶çææ¥å
å®ç°æå
å½ç¨æ·è¯·æ±çæ Excel æ¥è¡¨æ¶ï¼éµå¾ªä»¥ä¸æ¥éª¤ï¼
Step 1: æ°æ®åå¤
import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import Font, PatternFill, Alignment
from openpyxl.utils.dataframe import dataframe_to_rows
# è¯»åæ°æ®
df = pd.read_csv('data.csv')
# æä»æ°æ®åº
# df = pd.read_sql(query, connection)
Step 2: æ°æ®å¤ç
# æ°æ®æ¸
æ´å转æ¢
df_clean = df.dropna()
# ç»è®¡åæ
summary = df.groupby('category').agg({
'sales': ['sum', 'mean', 'count'],
'profit': 'sum'
})
Step 3: å建 Excel æä»¶
# ä½¿ç¨ pandas ExcelWriter
with pd.ExcelWriter('output.xlsx', engine='openpyxl') as writer:
# åå
¥åå§æ°æ®
df_clean.to_excel(writer, sheet_name='Raw Data', index=False)
# åå
¥æ±æ»æ°æ®
summary.to_excel(writer, sheet_name='Summary')
# è·å workbook è¿è¡æ ¼å¼å
workbook = writer.book
worksheet = writer.sheets['Summary']
Step 4: æ ¼å¼ååæ ·å¼
# æ 颿 ·å¼
header_font = Font(bold=True, color='FFFFFF')
header_fill = PatternFill(start_color='4472C4', end_color='4472C4', fill_type='solid')
# åºç¨æ ·å¼å°æ é¢è¡
for cell in worksheet[1]:
cell.font = header_font
cell.fill = header_fill
cell.alignment = Alignment(horizontal='center')
# å宽èªå¨è°æ´
for column in worksheet.columns:
max_length = 0
column_letter = column[0].column_letter
for cell in column:
if len(str(cell.value)) > max_length:
max_length = len(str(cell.value))
worksheet.column_dimensions[column_letter].width = max_length + 2
Step 5: æ·»å å¾è¡¨ï¼å¯éï¼
from openpyxl.chart import BarChart, Reference
# å建å¾è¡¨
chart = BarChart()
chart.title = "Sales by Category"
chart.x_axis.title = "Category"
chart.y_axis.title = "Sales"
# æ°æ®å¼ç¨
data = Reference(worksheet, min_col=2, min_row=1, max_row=10)
categories = Reference(worksheet, min_col=1, min_row=2, max_row=10)
chart.add_data(data, titles_from_data=True)
chart.set_categories(categories)
# æ·»å å°å·¥ä½è¡¨
worksheet.add_chart(chart, "E5")
é«çº§åè½
æ¡ä»¶æ ¼å¼
from openpyxl.formatting.rule import ColorScaleRule, CellIsRule
# è²é¶æ ¼å¼
worksheet.conditional_formatting.add(
'B2:B100',
ColorScaleRule(start_type='min', start_color='FF6347',
mid_type='percentile', mid_value=50, mid_color='FFFF00',
end_type='max', end_color='90EE90')
)
# åºäºè§åçæ ¼å¼
red_fill = PatternFill(start_color='FFC7CE', end_color='FFC7CE', fill_type='solid')
worksheet.conditional_formatting.add(
'C2:C100',
CellIsRule(operator='lessThan', formula=['0'], fill=red_fill)
)
æ°æ®éªè¯
from openpyxl.worksheet.datavalidation import DataValidation
# 䏿å表
dv = DataValidation(type="list", formula1='"ä¼ç§,è¯å¥½,ä¸è¬,è¾å·®"', allow_blank=True)
worksheet.add_data_validation(dv)
dv.add('D2:D100')
å ¬å¼åºç¨
# æ·»å æ±åå
¬å¼
worksheet['B11'] = '=SUM(B2:B10)'
# æ·»å å¹³åå¼å
¬å¼
worksheet['C11'] = '=AVERAGE(C2:C10)'
æä½³å®è·µ
1. æ§è½ä¼å
- 对äºå¤§æ°æ®éï¼>10ä¸è¡ï¼ï¼ä½¿ç¨
openpyxlçwrite_onlyæ¨¡å¼ - åæ¹å¤çæ°æ®ï¼é¿å å åæº¢åº
- 使ç¨
xlsxwriter弿å¤ç夿å¾è¡¨åæ ¼å¼
2. é误å¤ç
try:
df = pd.read_csv('data.csv')
except FileNotFoundError:
print("æ°æ®æä»¶ä¸åå¨")
except pd.errors.EmptyDataError:
print("æ°æ®æä»¶ä¸ºç©º")
3. æä»¶å½åè§è
from datetime import datetime
# ä½¿ç¨æ¶é´æ³é¿å
æä»¶è¦ç
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
filename = f'sales_report_{timestamp}.xlsx'
4. æ°æ®éªè¯
# æ£æ¥å¿
éå
required_columns = ['date', 'product', 'sales']
if not all(col in df.columns for col in required_columns):
raise ValueError(f"缺å°å¿
éå: {required_columns}")
# æ°æ®ç±»åéªè¯
df['date'] = pd.to_datetime(df['date'])
df['sales'] = pd.to_numeric(df['sales'], errors='coerce')
5. 模æ¿ç®¡ç
- å°å¸¸ç¨æ¨¡æ¿åæ¾å¨
~/.claude/skills/excel-report-generator/templates/ç®å½ - 使ç¨ç¸å¯¹è·¯å¾å¼ç¨:
templates/monthly_report.xlsx - ä¿ææ¨¡æ¿ç®æ´ï¼åªå å«ç»æåæ ·å¼ï¼ä¸å 嫿°æ®
å¿«éåè
常ç¨ä»£ç çæ®µ
æ¥ç examples/quick_reference.py è·å常ç¨ä»£ç çæ®µï¼å
æ¬ï¼
- åºæ¬ Excel å建
- å¤å·¥ä½è¡¨ç®¡ç
- æ ·å¼åæ ¼å¼å
- å¾è¡¨å建
- æ¡ä»¶æ ¼å¼
- å ¬å¼åºç¨
ç¤ºä¾æä»¶
examples/basic_report.py– åºç¡æ¥è¡¨çæç¤ºä¾examples/advanced_report.py– é«çº§åè½ç¤ºä¾examples/template_fill.py– 模æ¿å¡«å 示ä¾templates/business_report.xlsx– ä¸å¡æ¥å模æ¿templates/data_analysis.xlsx– æ°æ®åææ¨¡æ¿
ä¾èµå®è£
ç¡®ä¿å·²å®è£ å¿ éç Python å ï¼
pip install pandas openpyxl xlsxwriter
å¯éä¾èµï¼
pip install matplotlib seaborn # ç¨äºæ°æ®å¯è§å
pip install sqlalchemy pymysql # ç¨äºæ°æ®åºè¿æ¥
æ éææ¥
常è§é®é¢
Q: çæç Excel æä»¶æ æ³æå¼
A: ç¡®ä¿ä½¿ç¨ .xlsx æ©å±åï¼æ£æ¥æä»¶æéï¼éªè¯æ°æ®ä¸æ²¡æéæ³å符
Q: å¾è¡¨ä¸æ¾ç¤º A: æ£æ¥æ°æ®å¼ç¨èå´æ¯å¦æ£ç¡®ï¼ç¡®ä¿æ°æ®ç±»å为æ°å¼å
Q: 䏿乱ç
A: ä½¿ç¨ encoding='utf-8-sig' 读å CSVï¼æå¨ Excel ä¸ä½¿ç¨ UTF-8 ç¼ç
Q: 大æä»¶çæå¾æ
¢
A: ä½¿ç¨ write_only=True 模å¼ï¼åå°æ ¼å¼åæä½ï¼åæ¹åå
¥æ°æ®
ç¸å ³èµæº
- pandas 宿¹ææ¡£
- openpyxl 宿¹ææ¡£
- xlsxwriter 宿¹ææ¡£
- æ¥ç
REFERENCE.mdè·åè¯¦ç» API åè
çæ¬åå²
- v1.0.0 (2025-01-12) – åå§çæ¬ï¼æ¯æåºç¡æ¥è¡¨çæå模æ¿å¡«å