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 09 Python
python之import机制详解
Jul 03 Python
Python封装shell命令实例分析
May 05 Python
Python中使用ElementTree解析XML示例
Jun 02 Python
在Django的视图中使用数据库查询的方法
Jul 16 Python
对Python中9种生成新对象的方法总结
May 23 Python
Python使用numpy模块创建数组操作示例
Jun 20 Python
Python3匿名函数lambda介绍与使用示例
May 18 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
Aug 02 Python
Python 3.8正式发布重要新功能一览
Oct 17 Python
详解使用django-mama-cas快速搭建CAS服务的实现
Oct 30 Python
Django用户身份验证完成示例代码
Apr 03 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
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
Apache2中实现多网站域名绑定的实现方法
2011/06/01 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
(function(){})()的用法与优点
2007/03/11 Javascript
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
jQuery.position()方法获取不到值的安全替换方法
2015/03/13 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
vue2组件之select2调用的示例代码
2017/10/12 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
vue.js 获取select中的value实例
2018/03/01 Javascript
element-ui表格列金额显示两位小数的方法
2018/08/24 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
js实现弹幕飞机效果
2020/08/27 Javascript
vue项目中openlayers绘制行政区划
2020/12/24 Vue.js
wxpython 最小化到托盘与欢迎图片的实现方法
2014/06/09 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
2017/11/11 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
Django如何开发简单的查询接口详解
2019/05/17 Python
Python操作SQLite/MySQL/LMDB数据库的方法
2019/11/07 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
如何在VSCode下使用Jupyter的教程详解
2020/07/13 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
Python如何批量生成和调用变量
2020/11/21 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
Java如何调用外部Exe程序
2015/07/04 面试题
教学实习自我评价
2014/01/28 职场文书
给校长的建议书500字
2014/05/15 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
Python源码解析之List
2021/05/21 Python
一文搞懂Python Sklearn库使用
2021/08/23 Python
十大最强岩石系宝可梦,怪颚龙实力最强,第七破坏力很强
2022/03/18 日漫