根据科目余额表自动生成科目汇总表的Python脚本


前言

这是一个根据科目余额表自动生成科目汇总表的Python脚本


一、 准备工作

表格的第一列是:科目代码、科目名称、期初借方、期初贷方、本年发生额借方、本年发生额贷方、期末借方、期末贷方。
需要注意的是,如果总科目下面有子科目,需要把总科目的合计删除。如果没有子科目,则不删除。
有子科目的顶级科目:
在这里插入图片描述
删除合计数:在这里插入图片描述

二、 代码如下

import pandas as pd
import os

# 假设您的原始Excel文件名为"科目余额表.xlsx",并且您要分类的列是第一列
file_path = '科目余额表.xlsx'
sheet_name = 0  # 如果您的Excel有多个sheet,确保使用正确的sheet名

# 读取原始的Excel文件
df = pd.read_excel(file_path, sheet_name=sheet_name)

# 创建一个字典来存储每个分类的DataFrame
groups = {}

# 遍历DataFrame的每一行
for index, row in df.iterrows():
    # 获取A列的前四个字符,并确保它们是字符串形式
    key = str(row.iloc[0])[:4]
    # 检查key是否存在于groups字典中,如果不存在则初始化为空的DataFrame
    if key not in groups:
        groups[key] = pd.DataFrame()
    # 使用pandas的append方法将行添加到对应的DataFrame中
    groups[key] = pd.concat([groups[key], pd.DataFrame([row])], ignore_index=True)

writer = pd.ExcelWriter('科目分类.xlsx', engine='openpyxl')

# 遍历groups字典,将每个分类的数据保存到Excel的一个标签页中
for key, group_df in groups.items():
                          #1代表第3列开始求和,0代表从第2列
    sum_df = group_df.iloc[0:, :].sum(axis=0).to_frame().T
    # 给求和的DataFrame添加列名,如果有的话
    if not sum_df.empty:
        sum_df.columns = group_df.columns

    # 将原始数据和求和结果保存到Excel的特定标签页中
    group_df.to_excel(writer, sheet_name=key, startrow=0, index=False, header=True)
    # 将求和结果写入到标签页的最后一行
    sum_df.to_excel(writer, sheet_name=key, startrow=group_df.shape[0] + 1, index=False, header=False)

writer.close()
print("分类完成。\n----------------")

# 假设您的原始Excel文件名为"原始数据.xlsx"
grouping_path = '科目分类.xlsx'

# 使用pandas的ExcelFile类来读取整个Excel文件
xls = pd.ExcelFile(grouping_path)

# 创建一个空的DataFrame来存储汇总结果
summary_df = pd.DataFrame()

# 遍历Excel文件中的每个标签(sheet)
for sheet_name in xls.sheet_names:
    # 读取每个标签(sheet)的数据
    df_sheet = pd.read_excel(xls, sheet_name=sheet_name)

    # 检查sheet是否有足够的行来包含求和结果
    if len(df_sheet) > 1:
        # 假定求和结果是在最后一行的第7列和第8列
        summary_row = df_sheet.iloc[-1, [4,5,6,7]]  # 列的索引是从0开始的,所以78列的索引是67

        # 创建一个新的DataFrame来存储当前sheet的求和结果
        sheet_summary_df = pd.DataFrame({
            '项目': [sheet_name],
            '本期借方': summary_row.iloc[0],
            '本期贷方': summary_row.iloc[1],
            '期末借方': summary_row.iloc[2],
            '期末贷方': summary_row.iloc[3]
        })

        # 将当前sheet的求和结果追加到汇总的DataFrame中
        summary_df = pd.concat([summary_df, sheet_summary_df], ignore_index=True)

# 显示汇总的DataFrame
print('科目汇总完成\n----------------')
print(summary_df)
# 如果需要,可以将汇总结果保存为新的Excel文件
summary_df.to_excel('科目汇总表.xlsx', index=False)

总结

挺好用的,缺点是输出结果不够直观,没有把科目名称也列出来,但没必要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值