Automatically generate Excel reports from data sources including CSV, databases, or Python data structures. Supports data analysis reports, business reports, data export, and template-based report generation using pandas and openpyxl. Activate when users mention Excel, spreadsheet, report generation, data export, or business reporting.
自动化 Excel 报表生成工具,支持从多种数据源生成专业的 Excel 报告。
这个 Skill 可以帮助你:
从原始数据生成包含统计分析、透视表和可视化图表的综合报告。
示例请求:
定期生成标准化的业务报告,如销售报告、KPI 仪表板等。
示例请求:
将数据库查询结果或系统数据导出为格式化的 Excel 文件。
示例请求:
基于预定义的 Excel 模板填充动态数据。
示例请求:
从 CSV 生成报表:
请从 sales_data.csv 生成一个销售分析报表,包含:
- 按产品分类的销售汇总
- 月度销售趋势图
- Top 10 产品排名
从 DataFrame 生成报表:
我有一个 pandas DataFrame,帮我生成 Excel 报表,包括:
- 数据透视表
- 条件格式高亮异常值
- 自动筛选和冻结首行
使用模板:
基于 templates/monthly_report.xlsx 模板,填充当月数据并生成报告
当用户请求生成 Excel 报表时,遵循以下步骤:
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)
# 数据清洗和转换
df_clean = df.dropna()
# 统计分析
summary = df.groupby('category').agg({
'sales': ['sum', 'mean', 'count'],
'profit': 'sum'
})
# 使用 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']
# 标题样式
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
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)'
openpyxl 的 write_only 模式xlsxwriter 引擎处理复杂图表和格式