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通过解析网页实现看报程序的方法
Aug 04 Python
python实现的简单抽奖系统实例
May 22 Python
让python 3支持mysqldb的解决方法
Feb 14 Python
python web基础之加载静态文件实例
Mar 20 Python
python机器学习之贝叶斯分类
Mar 26 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
Dec 06 Python
Python简单I/O操作示例
Mar 18 Python
详解python中的hashlib模块的使用
Apr 22 Python
Django1.11配合uni-app发起微信支付的实现
Oct 12 Python
Pytorch之parameters的使用
Dec 31 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
Jan 29 Python
opencv深入浅出了解机器学习和深度学习
Mar 17 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强制更新图片缓存的方法
2015/02/11 PHP
PHP中把对象数组转换成普通数组的方法
2015/07/10 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
2016/10/08 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
PHP实现数组的笛卡尔积运算示例
2017/12/15 PHP
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
JavaScript手机振动API
2016/06/11 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
关于vue的语法规则检测报错问题的解决
2018/05/21 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
python的urllib模块显示下载进度示例
2014/01/17 Python
用Python输出一个杨辉三角的例子
2014/06/13 Python
python 读取DICOM头文件的实例
2018/05/07 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
tornado+celery的简单使用详解
2019/12/21 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
在keras里实现自定义上采样层
2020/06/28 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
解决PyCharm无法使用lxml库的问题(图解)
2020/12/22 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
Html5饼图绘制实现统计图的方法
2020/08/05 HTML / CSS
高二英语教学反思
2014/01/19 职场文书
总经理岗位职责说明书
2014/07/30 职场文书
2014党员学习《反腐倡廉警示教育读本》思想汇报
2014/09/13 职场文书
机关作风建设自查报告
2014/10/22 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
小学班主任自我评价
2015/03/11 职场文书
民事起诉书范本
2015/05/19 职场文书
2016年社区六一儿童节活动总结
2016/04/06 职场文书
vue3获取当前路由地址
2022/02/18 Vue.js