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 相关文章推荐
zbar解码二维码和条形码示例
Feb 07 Python
python实现在pickling的时候压缩的方法
Sep 25 Python
Django中几种重定向方法
Apr 28 Python
python 如何快速找出两个电子表中数据的差异
May 26 Python
轻松理解Python 中的 descriptor
Sep 15 Python
Python高级用法总结
May 26 Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 Python
python3利用Socket实现通信的方法示例
May 06 Python
Python模块、包(Package)概念与用法分析
May 31 Python
Python with语句和过程抽取思想
Dec 23 Python
解决python gdal投影坐标系转换的问题
Jan 17 Python
python计算列表元素与乘积详情
Aug 05 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实现的zip文件内容比较类
2014/09/24 PHP
php中$_POST与php://input的区别实例分析
2015/01/07 PHP
php实现编辑和保存文件的方法
2015/07/20 PHP
Symfony2安装第三方Bundles实例详解
2016/02/04 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
Jquery选择器 $实现原理
2009/12/02 Javascript
js用拖动滑块来控制图片大小的方法
2015/02/27 Javascript
jQuery实现MSN中文网滑动Tab菜单效果代码
2015/09/09 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
2017/05/27 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
详解Layer弹出层样式
2017/08/21 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
vue 表单输入格式化中文输入法异常问题
2018/05/30 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
2021/02/04 jQuery
全面了解python字符串和字典
2016/07/07 Python
tornado 多进程模式解析
2018/01/15 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
Python列表删除元素del、pop()和remove()的区别小结
2019/09/11 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
拿来就用!Python批量合并PDF的示例代码
2020/08/10 Python
德国家具折扣店:POCO
2020/02/28 全球购物
测试工程师程序员求职信范文
2014/02/20 职场文书
团购业务员岗位职责
2014/03/15 职场文书
协议书样本
2014/04/23 职场文书
班主任评语大全
2014/04/26 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
大学活动总结模板
2014/07/10 职场文书
保外就医申请书范文
2015/08/06 职场文书
你对自己的信用报告有过了解吗?
2019/07/09 职场文书
创业计划书之甜品店
2019/09/18 职场文书
springboot中的pom文件 project报错问题
2022/01/18 Java/Android
Java GUI编程菜单组件实例详解
2022/04/07 Java/Android