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 pass 语句使用示例
Mar 11 Python
Python中使用第三方库xlrd来读取Excel示例
Apr 05 Python
简述Python中的面向对象编程的概念
Apr 27 Python
简要讲解Python编程中线程的创建与锁的使用
Feb 28 Python
python 转换 Javascript %u 字符串为python unicode的代码
Sep 06 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
Jun 09 Python
Python基于辗转相除法求解最大公约数的方法示例
Apr 04 Python
Python实现使用卷积提取图片轮廓功能示例
May 12 Python
python实现二维插值的三维显示
Dec 17 Python
详解Python给照片换底色(蓝底换红底)
Mar 22 Python
python yield和Generator函数用法详解
Feb 10 Python
Python3 如何开启自带http服务
May 18 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 MemCached 高级缓存应用代码
2010/08/05 PHP
php cli模式学习(PHP命令行模式)
2013/06/03 PHP
深入解析PHP内存管理之谁动了我的内存
2013/06/20 PHP
php数组去除空值函数分享
2015/02/02 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
js身份证验证超强脚本
2008/10/26 Javascript
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
浅谈javascript中的DOM方法
2015/07/16 Javascript
JS组件Form表单验证神器BootstrapValidator
2016/01/26 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
微信小程序实现tab左右切换效果
2020/11/15 Javascript
Vue 样式绑定的实现方法
2019/01/15 Javascript
利用JavaScript将Excel转换为JSON示例代码
2019/06/14 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
Python实现PS滤镜碎片特效功能示例
2018/01/24 Python
利用pyinstaller将py文件打包为exe的方法
2018/05/14 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
2018/12/30 Python
六行python代码的爱心曲线详解
2019/05/17 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
k-means 聚类算法与Python实现代码
2020/06/01 Python
基于CSS3实现图片模糊过滤效果
2015/11/19 HTML / CSS
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
John Hardy官方网站:手工设计首饰的奢侈品牌
2017/07/05 全球购物
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
教育专业个人求职信
2013/12/02 职场文书
服装厂厂长岗位职责
2013/12/27 职场文书
报告会主持词
2014/04/02 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
2016圣诞节贺卡寄语
2015/12/07 职场文书
2016优秀护士求职自荐信
2016/01/28 职场文书
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android