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之眼花缭乱的运算符
Sep 14 Python
Python两个整数相除得到浮点数值的方法
Mar 18 Python
Python实现对PPT文件进行截图操作的方法
Apr 28 Python
详谈python http长连接客户端
Jun 12 Python
python框架中flask知识点总结
Aug 17 Python
Django 配置多站点多域名的实现步骤
May 17 Python
Django 路由控制的实现
Jul 17 Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 Python
python获取Linux发行版名称
Aug 30 Python
使用Django实现把两个模型类的数据聚合在一起
Mar 28 Python
Python多线程:主线程等待所有子线程结束代码
Apr 25 Python
pycharm 添加解释器的方法步骤
Aug 31 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
虫族 Zerg 魔法科技
2020/03/14 星际争霸
用PHP实现递归循环每一个目录
2010/08/08 PHP
第三章 php操作符与控制结构代码
2011/12/30 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
DOM精简教程
2006/10/03 Javascript
Expandable "Detail" Table Rows
2007/08/29 Javascript
JSON 编辑器实现代码
2009/12/06 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
JQuery页面图片切换和新闻列表滚动效果的具体实现
2013/09/26 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
即将发布的jQuery 3 有哪些新特性
2016/04/14 Javascript
jQuery实现动态文字搜索功能
2017/01/05 Javascript
Vue源码学习之初始化模块init.js解析
2017/11/02 Javascript
浅谈Angular文字折叠展开组件的原理分析
2017/11/24 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
vue中对象数组去重的实现
2020/02/06 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
在Python中调用ggplot的三种方法
2015/04/08 Python
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
Python实现字典的遍历与排序功能示例
2017/12/23 Python
python模仿网页版微信发送消息功能
2018/02/24 Python
pandas 读取各种格式文件的方法
2018/06/22 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
python实现感知器算法(批处理)
2019/01/18 Python
西尔斯百货官网:Sears
2016/09/06 全球购物
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
安踏广告词改编版
2014/03/21 职场文书
2014年乡镇党建工作总结
2014/11/11 职场文书
《红领巾真好》教学反思
2016/02/16 职场文书
怎样评估创业计划书是否有可行性?
2019/08/07 职场文书
如何用Node.js编写内存效率高的应用程序
2021/04/30 Javascript
你真的会用Mysql的explain吗
2022/03/31 MySQL