Install
openclaw skills install income-statement-cn根据明细表数据,自动生成规范格式利润表,收入支出按分类 2/3 分组动态汇总,含经营利润计算、固定格式和列宽。
openclaw skills install income-statement-cn根据明细表数据自动生成规范化利润表,支持动态行数扩展。
收入类:
支出类:
列结构:
| 列 | 内容 | 宽度 |
|---|---|---|
| B | 标题(收入/支出/经营利润) | 15 |
| C | 分类 2(工作坊/个案/导师费等) | 12 |
| D | 分类 3(具体项目名称) | 40 |
| E | 金额 | 15 |
| F | 空白 | 40 |
行结构:
格式要求:
#!/usr/bin/env python3
from openpyxl import load_workbook, Workbook
from openpyxl.styles import Font, Alignment
import glob
def create_income_statement(source_file, output_file):
"""
根据明细表生成利润表
Args:
source_file: 源 Excel 文件路径(含明细表)
output_file: 输出利润表路径
"""
wb_source = load_workbook(source_file)
ws_detail = wb_source['明细']
# 数据提取
income_by_cat2_cat3 = {}
expense_by_cat2_cat3 = {}
for row in range(2, ws_detail.max_row + 1):
cat1 = ws_detail.cell(row=row, column=3).value
cat2 = ws_detail.cell(row=row, column=4).value
cat3 = ws_detail.cell(row=row, column=5).value
income_amt = ws_detail.cell(row=row, column=6).value
expense_amt = ws_detail.cell(row=row, column=7).value
amount = ws_detail.cell(row=row, column=8).value
# 收入:优先发生金额
if cat1 in ['收入', '实收']:
amt = amount if amount else (income_amt if income_amt else 0)
if amt and amt > 0:
if cat2 not in income_by_cat2_cat3:
income_by_cat2_cat3[cat2] = {}
if cat3 not in income_by_cat2_cat3[cat2]:
income_by_cat2_cat3[cat2][cat3] = 0
income_by_cat2_cat3[cat2][cat3] += amt
# 支出:优先发生金额
if cat1 == '支出':
amt = amount if amount else (expense_amt if expense_amt else 0)
if amt and amt > 0:
if cat2 not in expense_by_cat2_cat3:
expense_by_cat2_cat3[cat2] = {}
if cat3 not in expense_by_cat2_cat3[cat2]:
expense_by_cat2_cat3[cat2][cat3] = 0
expense_by_cat2_cat3[cat2][cat3] += amt
# 创建工作簿
wb = Workbook()
ws = wb.active
ws.title = '利润表'
# 样式
title_font = Font(name='微软雅黑', size=12, bold=True)
bold_font = Font(name='微软雅黑', size=10, bold=True)
# === 填写数据 ===
# 标题行
ws.merge_cells('B1:F1')
ws['B1'] = '利润表 YYYYMM' # 替换实际月份
ws['B1'].font = title_font
ws['B1'].alignment = Alignment(horizontal='center', vertical='center')
# 收入部分
ws['B3'] = '收入'
ws['B3'].font = bold_font
# 动态填充收入明细...
# (按分类 2 标题 + 分类 3 明细的顺序)
# 支出部分
# (按分类 2 标题 + 分类 3 明细的顺序)
# 经营利润
# E 列 = E3 - 支出合计行
# F 列留空
for r in range(2, max_data_row + 1):
ws.cell(row=r, column=6, value='')
# 列宽
ws.column_dimensions['B'].width = 15
ws.column_dimensions['C'].width = 12
ws.column_dimensions['D'].width = 40
ws.column_dimensions['E'].width = 15
ws.column_dimensions['F'].width = 40
wb.save(output_file)
# 生成 202601 利润表
create_income_statement(
source_file='/Users/zhengyong/.openclaw/qqbot/downloads/财务报表 202601-claw_1774271697631.xlsx',
output_file='/Users/zhengyong/.openclaw/workspace/利润表 202601_明细生成.xlsx'
)
/Users/zhengyong/.openclaw/qqbot/downloads/财务报表 YYYYMM*.xlsx/Users/zhengyong/.openclaw/workspace/利润表 YYYYMM_明细生成.xlsx/Users/zhengyong/.openclaw/workspace/create_income_YYYYMM_simple.py创建时间:2026-03-23 最后更新:2026-03-23