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常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
Aug 25 Python
Python爬取网页中的图片(搜狗图片)详解
Mar 23 Python
python3设计模式之简单工厂模式
Oct 17 Python
Python生成数字图片代码分享
Oct 31 Python
python web基础之加载静态文件实例
Mar 20 Python
python3 pandas 读取MySQL数据和插入的实例
Apr 20 Python
Python3爬虫学习入门教程
Dec 11 Python
浅析Python3中的对象垃圾收集机制
Jun 06 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
Jul 22 Python
Django生成数据库及添加用户报错解决方案
Oct 09 Python
jupyter notebook快速入门及使用详解
Nov 13 Python
python获取天气接口给指定微信好友发天气预报
Dec 28 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之规范编程命名小结
2013/05/15 PHP
PHP INT类型在内存中占字节详解
2019/07/20 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
Js动态创建div
2008/09/25 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
js判断上传文件的类型和大小示例代码
2013/10/18 Javascript
解决js下referer兼容各大浏览器的方法
2014/11/03 Javascript
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
js实现tab选项卡切换功能
2017/01/13 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
一文了解Vue中的nextTick
2019/05/06 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
JavaScript实现文件下载并重命名代码实例
2019/12/12 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
vue中使用vue-pdf的方法详解
2020/09/05 Javascript
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
python实现TCP服务器端与客户端的方法详解
2015/04/30 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
详解python里的命名规范
2018/07/16 Python
Python读写文件基础知识点
2019/06/10 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
python有序查找算法 二分法实例解析
2020/02/18 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
Pycharm中如何关掉python console
2020/10/27 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
2020/12/08 Python
CSS3 flex布局之快速实现BorderLayout布局
2015/12/03 HTML / CSS
澳大利亚网上书店:QBD
2021/01/09 全球购物
普通党员个人剖析材料
2014/10/08 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
2015年重阳节慰问信
2015/03/23 职场文书
稽核岗位职责范本
2015/04/13 职场文书
2015年高中生国庆节演讲稿
2015/07/30 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript