利用python处理excel

2023-11-13

本宝宝有个工作中,需要报送个人所得税,其实以前我写过一个集成报送各年金税金vba的小代码,但是因为新接的任务数据量太大,vba可能会假死,即使能处理,也因为最近在自学python,所以想尝试用python
我的思路是:把报税模板复制出来,然后每月自动根据年金领取信息填写保存,吐槽一下,税表模板是xls,只支持6万数据,我尝试用一个xlsx文件上传,不过也成功了,嘻嘻,所以我手工把模板改成xlsx格式
第一步:复制模板
野生代码如下:

import pandas as pd
import numpy as np
import shutil
import os
import datetime
data_today = datetime.date.today()
print(data_today)
person_template = 'D:\报税工作\报税模板\人员信息.xlsx'
income_template = 'D:\报税工作\报税模板\年金领取.xlsx'
person_form='D:\报税工作\\xx计划年金人员'+str(data_today)+'.xlsx'
income_form='D:\报税工作\\xx计划年金收入'+str(data_today)+'.xlsx'
shutil.copyfile(person_template, person_form)
shutil.copyfile(income_template, income_form)

成功运行
在这里插入图片描述
然后使用了 dataframe和numpy数组进行把原始数据整理以后分别填入两个税表保存,
不管怎样,程序可以用,但是笨猪我用了遍历,好慢
12万数据简直卡死
重新搜索,利用dataframe的特性
7539人大概5秒钟就可以运行完毕
13万7500人大概使用35秒,完美!!!

import pandas as pd
import numpy as np
import shutil
import datetime
import xlwings as xw
app=xw.App(visible=True,add_book=False)
app.display_alerts=False
app.screen_updating=False
date_today = datetime.date.today()
starttime = datetime.datetime.now()
person_template = 'D:\报税工作\报税模板\人员信息.xlsx'
income_template = 'D:\报税工作\报税模板\年金领取.xlsx'
person_form='D:\报税工作\某计划年金人员'+str(date_today)+'.xlsx'
income_form='D:\报税工作\某计划年金收入'+str(date_today)+'.xlsx'
shutil.copyfile(person_template, person_form)
shutil.copyfile(income_template, income_form)
raw_data = pd.DataFrame(pd.read_excel('D:\报税工作\\201912\年金发放信息7539人.xlsm'))
raw_data['身份证'] = raw_data['身份证'].astype(str)
data_person = raw_data[['姓名','身份证']]
data_income = raw_data[['身份证','待遇支付金额']]
list_person_index=[[0,'A',''],[2,'证照类型','居民身份证'],[4,'E',''],[5,'F',''],[6,'G',''],[7,'人员状态','正常'],[8,'任职受雇类型','其他'],[9,'J',''],[10,'K',''],[11,'L',''],[12,'M',''],[13,'N',''],[14,'O',''],[15,'P',''],[16,'Q',''],[17,'R',''],[18,'S',''],[19,'备注','职业年金']]
for each in list_person_index:
    data_person.insert(each[0],each[1],each[2])
list_income_index=[[0,'A',''],[1,'B',''],[2,'证照类型','居民身份证'],[4,'是否一次性领取',''],[6,'已完税金额',0.00],[7,'全部缴税额',data_income['待遇支付金额']],[8,'分摊月份数',''],[9,'J',''],[10,'K',''],[11,'L',''],[12,'M',''],[13,'N',''],[14,'O',''],[15,'备注','职业年金']]
for each in list_income_index:
    data_income.insert(each[0],each[1],each[2])
data_person_arr=np.array(data_person)
data_income_arr=np.array(data_income)
wb_person=xw.Book(person_form)
wb_income=xw.Book(income_form)
sht_person=wb_person.sheets['人员信息']
sht_income=wb_income.sheets['年金领取收入']
rowmax=data_person_arr.shape[0]
rng_person = sht_person[1:rowmax+1,:20]
rng_person.value=data_person_arr
wb_person.save()
rng_income = sht_income[1:rowmax+1,:16]
rng_income.value=data_income_arr
wb_income.save()
wb_income.app.quit()
endtime = datetime.datetime.now()
print((endtime - starttime).seconds)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用python处理excel 的相关文章

随机推荐

  • SourceTree导入产品证书

    SourceTree导入产品证书 可以到我的资源中下载 SourceTree产品证书 解压后得到一个文件 sourcetree license 直接导入即可使用
  • Matlab知识点基础(一)

    最近感觉在这上面搜相应的知识点都好困难 所以自己写点总结 以免又忘了 1 循环的总结 1 1 编写MATLAB程序 计算1到100的和 for 循环 s 0 for i 1 1 100 这里分别是初始值 间隔 终止值 s s i end s
  • live555学习之二和客户端通信流程顶层

    1 创建了一个 RTSPClientConnection 类型的实例 session RTSPClientConnection 2 调用该类的处理函数 session gt incomingRequestHandler1 2 1 读取 so
  • python基础语法

    基础语法 持续学习更新中 1 变量类型 2 逻辑语句 3 类 Python内置类属性 4 错误和异常 1 变量类型 数字 字符串 字符串可以看做是字符的列表 不存在字符类型 包含一个字符的也称作字符串 创建字符串可以用单引号也可以用双引号
  • 机器学习速成课程笔记10:使用TF的基本步骤

    快速翻阅 快速学习 TensorFlow 是一个用于人工智能的开源神器 TensorFlow 是一个采用数据流图 data flow graphs 用于数值计算的开源软件库 节点 Nodes 在图中表示数学操作 图中的线 edges 则表示
  • Qt纯代码实现添加背景图片的自定义按钮

    Qt的控件中提供了按钮类 我们在调用一个按钮控件的时候 一般通过使用按钮类本身的接口函数已经够用了 在添加按钮的图标或者背景的时候可以通过调用如下所示的接口函数 void setIcon const QIcon icon 虽然Qt已经提供了
  • 异步模式之生产者消费者

    4 异步模式之生产者消费者 刚才的情况 我们一直都在讨论 一个执行者对应一个接收者的情况 下面 我们来讨论另外一种情况 多个生产者对应多应多个消费者的情况 消息类 class Message private int id private O
  • json基本使用与简介

    一 简介 二 json两种构造结构 三 js解析JSON 1 JSON2解析JSON 2 用eval 方法把JSON字符串转化成JSON对象 3 使用JSON2中的JSON对象的parser 方法解析JSON字符串 4 使用JSON2中的J
  • Jupyter notebook更换工作目录

    打开Anaconda 打开cmd Prompt如图所示 输入jupyter notebook generate config找到目录文件jupyter notebook config py jupyter notebook config p
  • vsphere 虚拟机的迁移,冷迁移,vmotion(热迁移)

    备注 理论部分参考王春海老师的课程 一 概述 1 vsphere数据中心当处于某种目的进行维护时 需要将某台主机上运行或关闭的虚拟机 迁移到其他主机上 这个时候就需要使用迁移 2 可以使用冷迁移或热迁移将虚拟机移到其他主机或数据存储 3 迁
  • 开发前期准备工作

    开发前期准备工作 文章目录 开发前期准备工作 0 代码规范 0 1 强制 0 2 推荐 0 3 参考 dao 跟数据库打交道 service 业务层 人类思维解决 controller 抽象化 0 4 注释规范 0 5 日志规范 0 6 专
  • 欧姆龙NJ1P2 Fins Udp通讯

    NJ1P2 Tcp连接不成功 咨询客服说不支持Fins Tcp 所以改成Udp方式 Udp连接 locateIp IPAddress Parse txtLocateIP Text locatePoint new IPEndPoint loc
  • 使用CMakeList编译报错

    可能出现的一个原因是磁盘空间不足 使用 df h 查看磁盘空间 若磁盘空间已满 清理磁盘 然后再进行编译
  • Gradle project sync failed. Please fix your project and try again.

    在Android Studio中Import Module后 再运行项目 报下列错误 Gradle project sync failed Please fix your project and try again 这是由于build gr
  • node.js学习

    一 基础知识 1 终端 shell命令 dir 列出当前目录下所有路径 表示当前目录 表示上一级目录 md 目录名 新建文件 rd 目录名 删除文件 文件名 直接打开文件 2 环境变量 windows系统中的变量 配置path 当在命令行窗
  • 数字图像处理之二维码图像提取算法(十一)

    check ratio requirement b w b w b 1 1 3 1 1 bool qr checkRatio totalFinderSize 0 for int i 0 i lt 5 i int count stateCou
  • vue项目PC端屏幕分辨率与窗口大小自适应

    效果 mermaid svg O0n9N0Pq5xuLBK3e label font family trebuchet ms verdana arial font family var mermaid font family fill 33
  • java求数组中,某个值连续出现次数最多的数的次数

    这次遇到的问题是 要在一个数组中找到连续出现次数最多的数的次数 下面的数组 我想拿到0的连续出现次数最多的次数 连续出现3次 第一次0连续出现一次 第二次连续出现2次 第三次连续出现6次 我要拿到6次这个东西 int s 0 1 0 0 1
  • 信息物理系统(CPS)之吾之愚见

    信息物理系统 CPS 是这两年比较热门的研究方向 下面我就从定义 结构等2个方面浅谈一下 如有错误之处请多指教 信息物理系统是集成计算 通信与控制于一体的下一代智能系统 通过人机交互接口实现和物理进程的交互 使用网络化空间以远程的 可靠的
  • 利用python处理excel

    本宝宝有个工作中 需要报送个人所得税 其实以前我写过一个集成报送各年金税金vba的小代码 但是因为新接的任务数据量太大 vba可能会假死 即使能处理 也因为最近在自学python 所以想尝试用python 我的思路是 把报税模板复制出来 然