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 相关文章推荐
详解Python3中yield生成器的用法
Aug 20 Python
Python实现定时任务
Feb 08 Python
python实现求解列表中元素的排列和组合问题
Mar 15 Python
tensorflow学习教程之文本分类详析
Aug 07 Python
Python SQL查询并生成json文件操作示例
Aug 17 Python
python实现顺序表的简单代码
Sep 28 Python
实例详解Python模块decimal
Jun 26 Python
python实现点击按钮修改数据的方法
Jul 17 Python
python KNN算法实现鸢尾花数据集分类
Oct 24 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
Mar 14 Python
python 读取二进制 显示图片案例
Apr 24 Python
python有几个版本
Jun 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常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
让innerHTML的脚本也可以运行起来
2006/07/01 Javascript
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
javascript call方法使用说明
2010/01/11 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
2014/08/12 Javascript
jquery实现先淡出再折叠收起的动画效果
2015/08/07 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
js获取form表单中name属性的值
2019/02/27 Javascript
[02:43]DOTA2英雄基础教程 半人马战行者
2014/01/13 DOTA
[01:25:33]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第二场 12.20
2020/12/23 DOTA
python3读取csv和xlsx文件的实例
2018/06/22 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
自荐信的两点禁忌
2013/10/30 职场文书
客服主管岗位职责
2013/12/13 职场文书
入党自我评价优缺点
2014/01/25 职场文书
吃空饷专项治理工作实施方案
2014/03/04 职场文书
给校长的建议书400字
2014/05/15 职场文书
争先创优公开承诺书
2014/08/30 职场文书
工作批评与自我批评范文
2014/10/16 职场文书
2014小学语文教学工作总结
2014/12/17 职场文书
业务内勤岗位职责
2015/04/13 职场文书
2019年朋友圈经典励志语录50条
2019/07/05 职场文书
教您:房贷工资收入证明应该怎么写?
2019/08/19 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
英镑符号 £
2022/02/17 杂记
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers