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写的创建文件夹自定义函数mkdir()
Aug 25 Python
使用Python绘制图表大全总结
Feb 11 Python
一些Centos Python 生产环境的部署命令(推荐)
May 07 Python
解决tensorflow模型参数保存和加载的问题
Jul 26 Python
浅谈Python批处理文件夹中的txt文件
Mar 11 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
Jun 24 Python
python+numpy按行求一个二维数组的最大值方法
Jul 09 Python
给我一面国旗 python帮你实现
Sep 30 Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 Python
将labelme格式数据转化为标准的coco数据集格式方式
Feb 17 Python
python实现简单的购物程序代码实例
Mar 03 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
Jun 10 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
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
php实现俄罗斯乘法实例
2015/03/07 PHP
PHP+Ajax 检测网络是否正常实例详解
2016/12/16 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
jQuery:节点(插入,复制,替换,删除)操作
2013/03/04 Javascript
javascript 动态创建表格的2种方法总结
2015/03/04 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
webpack 静态资源集中输出的方法示例
2018/11/09 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
layer 关闭指定弹出层的例子
2019/09/25 Javascript
JS实现盒子拖拽效果
2020/02/06 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
Python 实现交换矩阵的行示例
2019/06/26 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
python读取多层嵌套文件夹中的文件实例
2020/02/27 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
举例详解HTML5中使用JSON格式提交表单
2015/06/16 HTML / CSS
Web前端页面跳转并取到值
2017/04/24 HTML / CSS
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
飞利信loadrunner和软件测试笔试题
2012/09/22 面试题
优秀员工获奖感言
2014/03/01 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
年度评优评先方案
2014/06/03 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
医院领导班子整改方案
2014/10/01 职场文书
仓管员岗位职责范本
2015/04/01 职场文书
跑吧孩子观后感
2015/06/10 职场文书
PHP命令行与定时任务
2021/04/01 PHP