Python技术练习------自动化处理费用表

一、前言  

       我们通常在处理表格中数据的时候,主要还是使用VBA代码来对数据进行加工处理。之前也通过VBA代码对表格数据进行了处理,链接:https://blog.csdn.net/YANG_1605/article/details/111998521。最近在学习python编程处理Excel,使用到openpyxl模块的知识。就试着使用python来实现费用表的汇总。

首先要导入openpyxl包,下载链接:https://pypi.org/project/openpyxl/#files

安装方法:
输入cmd命令,进入到控制台界面:

然后进入到openpyxl包所在的路径(其实进不进路径无所谓,安装时命令会自动在电脑上寻找,作者习惯进入当前路径),执行pip install openpyxl命令:

安装完成后,打开Pycharm编辑器

import openpyxl

二、项目简介

本次实例中总共包含6个工作表,通过对6张表中的数据进行提取,再进行运算,将其汇总成一张新的表格。这就是本次实例所要实现的功能。

六张表分别是:财务费用汇总(入账+未入账)、数据源(入账)、数据源(未入账)、试算表-是、试算表-非和试算表-上月累计额。其中财务费用汇总(入账+未入账)为最终要汇总形成的表。

逻辑思路:

1.数据源(未入账)处理:通过试算表-非的每一行D列与F列数据相减得到的差,对应填到数据源(未入账)表的金额列中,再通过每一行的金额与费用总和进行相除,得到对应的结构比率

2.数据源(入账)处理:通过试算表-是的每一行D列与F列数据相减得到的差,对应填到数据源(入账)表的金额列中,再通过每一行的金额与费用总和进行相除,得到对应的结构比率

3.财务费用汇总(入账+未入账):

3.1 处理本月发生额:将数据源(入账)和数据源(未入账)中金额进行相加,得到的和放到汇总表的本月发生额的金额中,再通过每一行的金额与费用总和进行相除,得到对应的结构比率

3.2 上月累计额:从试算表-上月累计额中复制得到,放到汇总表的E列和F列中

3.3 计算本年累计额:本月发生额的金额与上月累计额的金额相加,得到本年累计额的金额,再通过每一行的金额与费用总和进行相除,得到对应的结构比率

三、代码实现

import openpyxl 
wb = openpyxl.load_workbook(r'F:\python表格\费用处理.xlsx')
print(wb.sheetnames)
#定义要处理的表格
ws = wb['试算表-是']
ws1 = wb['数据源(入账)']
ws2 = wb['试算表-非']
ws3 = wb['数据源(未入账)']
ws4 = wb['试算表-上月累计额']
ws5 = wb['财务费用汇总(入账+未入账)']

#数据源(入账)表格处理
sum = 0
for i in range(1,34):
    #tmp = (ws1["D"+str(i+3)].value - ws1["E"+str(i+3)].value)
    tmp = ws.cell(row = i + 3,column = 4).value - ws.cell(row = i + 3,column = 5).value  #计算差值,用临时变量tmp进行保存
    sum = sum + tmp     #计算差值的和
    ws1["C"+str(i+3)].value = tmp  #将tmp保存的值传入到数据源(入账)中
ws1["C37"].value = sum   #将计算的和放到C列的最后面
for i in range(1,35):
    ws1.cell(row = i + 3,column = 4).value = ws1.cell(row = i + 3,column = 3).value/sum  #计算结构比率,并写入到相应位置

#数据源(非入账)处理
sum1 = 0
for i in range(1,34):
    tmp = ws2.cell(row = i + 3,column = 4).value - ws2.cell(row = i + 3,column = 5).value
    sum1 = sum1 + tmp
    ws3.cell(row = i + 3,column = 3,value = tmp)
ws3['C37'].value = sum1
for i in range(1,35):
    ws3.cell(row = i + 3,column = 4).value = ws3.cell(row = i + 3,column = 3).value/sum1

#试算表-上月累计额处理
for i in range(1,35):
    ws5.cell(row = i + 3,column = 5).value = ws4.cell(row = i + 3,column = 7).value
    ws5.cell(row = i + 3,column = 6).value = ws4.cell(row = i + 3,column = 8).value

#财务费用汇总(入账 + 未入账)
#处理本月发生额

for i in range(1,35):
    tmp = ws1.cell(row = i + 3,column = 3).value + ws3.cell(row = i + 3,column = 3).value
    ws5.cell(row = i + 3,column = 3,value = tmp)
for i in range(1,35):   # 计算结构比率
    ws5.cell(row = i + 3,column = 4).value = ws5.cell(row = i + 3,column = 3).value/ws5.cell(row = 37,column = 3).value

#本年累计额处理计算
for i in range(1,35):
    ws5.cell(row = i + 3,column = 7).value = ws5.cell(row = i + 3,column = 3).value + ws5.cell(row = i + 3,column = 5).value
for i in range(1,35):   # 计算结构比率
    ws5.cell(row = i + 3,column = 8).value = ws5.cell(row = i + 3,column = 7).value/ws5.cell(row = 37,column = 7).value

wb.save('F:\python表格\费用处理.xlsx')

四、运行效果展示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值