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通过BF算法实现关键词匹配的方法
Mar 13 Python
仅用50行代码实现一个Python编写的计算器的教程
Apr 17 Python
python开发之字符串string操作方法实例详解
Nov 12 Python
Python多进程同步简单实现代码
Apr 27 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
Feb 11 Python
使用python对excle和json互相转换的示例
Oct 23 Python
python实现自动化上线脚本的示例
Jul 01 Python
对Python 中矩阵或者数组相减的法则详解
Aug 26 Python
python交互模式基础知识点学习
Jun 18 Python
快速解释如何使用pandas的inplace参数的使用
Jul 23 Python
套娃式文件夹如何通过Python批量处理
Aug 23 Python
总结Pyinstaller的坑及终极解决方法(小结)
Sep 21 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
一个程序下载的管理程序(三)
2006/10/09 PHP
php 深入理解strtotime函数的使用详解
2013/05/23 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
2014/06/21 PHP
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
php字符串函数 str类常见用法示例
2020/05/15 PHP
淘宝搜索框效果实现分析
2011/03/05 Javascript
JavaScript中常用的运算符小结
2012/01/18 Javascript
javascript针对DOM的应用实例(一)
2012/04/15 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
js实现(全选)多选按钮的方法【附实例】
2016/03/30 Javascript
AngularJS入门教程之 XMLHttpRequest实例讲解
2016/07/27 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
2018/02/08 Javascript
Vue中v-show添加表达式的问题(判断是否显示)
2018/03/26 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
Vue.js构建你的第一个包并在NPM上发布的方法步骤
2019/05/01 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
layui数据表格 table.render 报错的解决方法
2019/09/29 Javascript
python计算时间差的方法
2015/05/20 Python
对python中类的继承与方法重写介绍
2019/01/20 Python
python中metaclass原理与用法详解
2019/06/25 Python
Python matplotlib学习笔记之坐标轴范围
2019/06/28 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
python判断自身是否正在运行的方法
2019/08/08 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
利用指针变量实现队列的入队操作
2012/04/07 面试题
担保书怎么写
2014/04/01 职场文书
机械系毕业生求职信
2014/05/28 职场文书
不同意离婚答辩状
2015/05/22 职场文书
2016年万圣节家长开放日活动总结
2016/04/05 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL
pytorch损失反向传播后梯度为none的问题
2021/05/12 Python