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读写ini配置文件方法实例分析
Jun 30 Python
Python采用Django开发自己的博客系统
Sep 29 Python
Python、PyCharm安装及使用方法(Mac版)详解
Apr 28 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
Jun 02 Python
Python验证文件是否可读写代码分享
Dec 11 Python
Python中最大最小赋值小技巧(分享)
Dec 23 Python
python验证码识别实例代码
Feb 03 Python
Python 函数返回值的示例代码
Mar 11 Python
python实现AES加密与解密
Mar 28 Python
python操作yaml说明
Apr 08 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
May 22 Python
python开发制作好看的时钟效果
May 02 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
Windows下的PHP5.0安装配制详解
2006/09/05 PHP
社区(php&&mysql)四
2006/10/09 PHP
ThinkPHP入口文件设置及相关注意事项分析
2014/12/05 PHP
Jquery Validation插件防止重复提交表单的解决方法
2010/03/05 Javascript
从零开始学习jQuery (二) 万能的选择器
2010/10/01 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
js Array操作的最简短最容易理解方法
2013/12/09 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
JavaScript中的变量作用域介绍
2014/12/31 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
jquery实现左右滑动菜单效果代码
2015/08/27 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
2017/09/20 jQuery
vuex操作state对象的实例代码
2018/04/25 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
2019/09/23 Javascript
JS实现简单tab选项卡切换
2019/10/25 Javascript
微信小程序图片自适应实现解析
2020/01/21 Javascript
JS实现碰撞检测效果
2020/03/12 Javascript
JavaScript前端开发时数值运算的小技巧
2020/07/28 Javascript
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
Python实现的下载网页源码功能示例
2017/06/13 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
Django中使用 Closure Table 储存无限分级数据
2019/06/06 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
Python 转换RGB颜色值的示例代码
2019/10/13 Python
Python如何使用PIL Image制作GIF图片
2020/05/16 Python
浅析python连接数据库的重要事项
2021/02/22 Python
Html5如何唤起百度地图App的方法
2019/01/27 HTML / CSS
工程造价与财务管理专业应届生求职信
2013/10/06 职场文书
酒店总经理欢迎词
2014/01/15 职场文书
铲车司机岗位职责
2014/03/15 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
Django使用channels + websocket打造在线聊天室
2021/05/20 Python