python保留格式汇总各部门excel内容的实现思路


Posted in Python onJune 01, 2020

使用pthon汇总各部门的excel内容,主要思路:

1.使用pandas读入汇总表(b3df)和其中一个部门的表格内容(dedf)
2.填充pandas空值,使'项目名称','主管部门'列没有空值
3.使用xlwings打开汇总表(b3ws)和部门表(dews)
4.用b3df、dedf对比两个表中项目的行数是否一样,不一样则在汇总表(b3ws)插入行,使汇总表和部门表格(dews)一致
5.复制部门表格(dews)内容到汇总表(b3ws)
6.保存退出

汇总表格如下:

python保留格式汇总各部门excel内容的实现思路

汇总A、B、C、D部门后的表格如下:

python保留格式汇总各部门excel内容的实现思路

具体代码如下:

import pandas as pd
import xlwings as xw

def insertRow(zgfj,deFile,b3df,b3ws):
  '''
  '''
  print('正在汇总:' + zgfj)
  dedf = pd.read_excel(deFile,header=3)
  dedf[['项目名称','主管部门']] = dedf[['项目名称','主管部门']].fillna(axis=0,method='ffill')
  dewb = app.books.open(deFile)
  dews = dewb.sheets[0]
  #对比两个表的不同
  df1 = pd.pivot_table(dedf[dedf['主管部门']==zgfj],values='责任单位',index='项目名称',aggfunc=[len])
  df2 = pd.pivot_table(b3df[b3df['主管部门']==zgfj],values='责任单位',index='项目名称',aggfunc=[len])
  df12 = df1 - df2
  if df12.shape[0]:
    diff = df12[df12[('len','责任单位')] != 0]
  #两个表不同则修改excel表,使相同项目的行数相同
  #if diff.shape[0]:
    for xmmc in list(diff.index):
      for r in range(1,b3ws.used_range.shape[0]+1):                  
        if b3ws.range(r,2).value == xmmc:
          if diff.loc[xmmc][0] > 0:
            print(str(r+1) + ':' + str(int(r+diff.loc[xmmc][0])))
            b3ws.api.rows(str(r+1) + ':' + str(int(r+diff.loc[xmmc][0]))).insert #插入部门多出的行
            break
          else:
            b3ws.api.rows(str(r+1) + ':' + str(int(r-diff.loc[xmmc][0]))).delete #删除多余的行
            break
  #复制部门内容到汇总表
  for xmmc in list(df2.index):
    for r in range(1,b3ws.used_range.shape[0]+1):                  
        if b3ws.range(r,2).value == xmmc:
          #项目名称在部门excel表的行号
          rfj = dedf[dedf['项目名称'] == xmmc].index[0] + 5
          #需要插入的行数
          rows = df1.loc[xmmc][0]
          #复制部门excel表格项目名称所在行到汇总表
          dews.api.rows(str(rfj) + ':' + str(rfj+rows-1)).Copy(b3ws.api.rows(str(r) + ':' + str(r+rows-1)))
          break #因为项目名称唯一,复制后可跳出进行下一项目
if __name__ == '__main__':
  #汇总表格文件
  b3File = '汇总文件.xls'
  #各部门表格文件所在位置
  fjFile = {'B部门':'B部门.xls',\
       'A部门':'A部门.xls',\
       'C部门':'C部门.xls',\
       'D部门':'D部门.xls'}
  app = xw.App(visible=False,add_book=False)
  app.display_alerts = False
  app.screen_updating = False
  b3wb = app.books.open(b3File)
  b3ws = b3wb.sheets[0]
  b3df = pd.read_excel(b3File,header=3)
  for zgfj,file in fjFile.items():
    b3df[['项目名称','主管部门']] = b3df[['项目名称','主管部门']].fillna(axis=0,method='ffill') #填充合并单元格内容
    #print(b3df.shape[0])
    insertRow(zgfj,file,b3df,b3ws)
    
  b3wb.save('汇总后文件.xls')
  app.quit()
  app.kill()

总结

到此这篇关于python保留格式汇总各部门excel内容的实现思路的文章就介绍到这了,更多相关python保留格式excel内容内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
深入理解Python中变量赋值的问题
Jan 12 Python
Python实现的堆排序算法原理与用法实例分析
Nov 22 Python
Python之Scrapy爬虫框架安装及简单使用详解
Dec 22 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
Jul 30 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
Nov 06 Python
在Pycharm中自动添加时间日期作者等信息的方法
Jan 16 Python
Python使用LDAP做用户认证的方法
Jun 20 Python
python导包的几种方法(自定义包的生成以及导入详解)
Jul 15 Python
seek引发的python文件读写的问题及解决
Jul 26 Python
Flask框架学习笔记之使用Flask实现表单开发详解
Aug 12 Python
python实现录屏功能(亲测好用)
Mar 02 Python
PyCharm中关于安装第三方包的三个建议
Sep 17 Python
Python如何使用正则表达式爬取京东商品信息
Jun 01 #Python
浅谈pycharm导入pandas包遇到的问题及解决
Jun 01 #Python
python实现密码验证合格程序的思路详解
Jun 01 #Python
Python网络爬虫四大选择器用法原理总结
Jun 01 #Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
Jun 01 #Python
pycharm设置默认的UTF-8编码模式的方法详解
Jun 01 #Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
Jun 01 #Python
You might like
如何在PHP中使用Oracle数据库(2)
2006/10/09 PHP
聊天室php&mysql(一)
2006/10/09 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
详解jquery uploadify 上传文件
2013/11/09 Javascript
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
2013/12/12 Javascript
遍历DOM对象内的元素属性示例代码
2014/02/08 Javascript
js中运算符&& 和 || 的使用记录
2014/08/21 Javascript
原生javaScript实现图片延时加载的方法
2014/12/22 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
2020/11/09 Javascript
Python 随机生成中文验证码的实例代码
2013/03/20 Python
python中global与nonlocal比较
2014/11/21 Python
详解django.contirb.auth-认证
2018/07/16 Python
django url到views参数传递的实例
2019/07/19 Python
Python selenium模块实现定位过程解析
2020/07/09 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
东南亚排名第一的服务市场:kaodim
2019/03/28 全球购物
接口可以包含哪些成员
2012/09/30 面试题
气象学专业个人求职信
2014/03/15 职场文书
经典演讲稿汇总
2014/05/19 职场文书
市委常委班子党的群众路线教育实践活动整改措施
2014/10/02 职场文书
计划生育诚信协议书
2014/11/02 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
2015年技术工作总结范文
2015/04/20 职场文书
法人代表资格证明书
2015/06/18 职场文书
初中团支书竞选稿
2015/11/21 职场文书
职场干货:简历中的自我评价应该这样写!
2019/05/06 职场文书
Java字符串逆序方法详情
2022/03/21 Java/Android
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers