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的设计模式编程入门指南
Apr 02 Python
使用相同的Apache实例来运行Django和Media文件
Jul 22 Python
python与php实现分割文件代码
Mar 06 Python
python实现给微信公众号发送消息的方法
Jun 30 Python
Python面向对象类继承和组合实例分析
May 28 Python
python中reader的next用法
Jul 24 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
Aug 12 Python
Django模板导入母版继承和自定义返回Html片段过程解析
Sep 18 Python
python能做什么 python的含义
Oct 12 Python
基于Django实现日志记录报错信息
Dec 17 Python
Pytorch GPU显存充足却显示out of memory的解决方式
Jan 13 Python
python 自定义异常和主动抛出异常(raise)的操作
Dec 11 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/02/03 PHP
php设计模式之单例模式实例分析
2015/02/25 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
Git命令之分支详解
2021/03/02 PHP
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
jQuery插件实现控制网页元素动态居中显示
2015/03/24 Javascript
AngularJS中run方法的巧妙运用
2017/01/04 Javascript
javascript判断回文数详解及实现代码
2017/02/03 Javascript
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
javascript深拷贝和浅拷贝详解
2017/02/14 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
2017/06/28 Javascript
js实现京东秒杀倒计时功能
2019/01/21 Javascript
解决layui 表单元素radio不显示渲染的问题
2019/09/04 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
Python中方法链的使用方法
2016/02/23 Python
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
用python实现k近邻算法的示例代码
2018/09/06 Python
Python实现的对一个数进行因式分解操作示例
2019/06/27 Python
python语言中有算法吗
2020/06/16 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
Pycharm 跳转回之前所在页面的操作
2021/02/05 Python
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
吃透移动端 1px的具体用法
2019/12/16 HTML / CSS
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
外包公司软件测试工程师
2014/11/01 面试题
国庆节促销广告语2014
2014/09/19 职场文书
工作检讨书大全
2015/01/26 职场文书
大国崛起日本观后感
2015/06/02 职场文书
李强感恩观后感
2015/06/17 职场文书
详细聊聊MySQL中慢SQL优化的方向
2021/08/30 MySQL
PHP 时间处理类Carbon
2022/05/20 PHP