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 相关文章推荐
python3访问sina首页中文的处理方法
Feb 24 Python
详解Python中的元组与逻辑运算符
Oct 13 Python
python按行读取文件,去掉每行的换行符\n的实例
Apr 19 Python
Python使用itertools模块实现排列组合功能示例
Jul 02 Python
python连接mongodb密码认证实例
Oct 16 Python
python使用xlrd模块读取xlsx文件中的ip方法
Jan 11 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
Aug 06 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
Aug 29 Python
Python中顺序表原理与实现方法详解
Dec 03 Python
Python基础之字符串格式化详解
Apr 21 Python
学会用Python实现滑雪小游戏,再也不用去北海道啦
May 20 Python
Jupyter notebook 更改文件打开的默认路径操作
May 21 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利用COM对象访问SQLServer、Access
2006/10/09 PHP
如何使用PHP中的字符串函数
2006/11/24 PHP
php验证是否是md5编码的简单代码
2014/04/01 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
2014/07/15 PHP
分享常见的几种页面静态化的方法
2015/01/08 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
PHP中配置IIS7实现基本身份验证的方法
2015/09/24 PHP
WordPress中获取所使用的模板的页面ID的简单方法
2015/12/31 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
2018/05/29 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
laravel 自定义常量的两种方案
2019/10/14 PHP
用javascript实现点击链接弹出"图片另存为"而不是直接打开
2007/08/15 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
jQuery实现的进度条效果
2015/07/15 Javascript
jQuery控制frames及frame页面JS的方法
2016/03/08 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/09/29 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
完美解决jQuery的hover事件在IE中不停闪动的问题
2017/02/10 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
JS库 Highlightjs 添加代码行号的实现代码
2017/09/13 Javascript
python利用elaphe制作二维条形码实现代码
2012/05/25 Python
深入解析Python中的WSGI接口
2015/05/11 Python
使用python绘制二元函数图像的实例
2019/02/12 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
2019/06/13 Python
Python3安装psycopy2以及遇到问题解决方法
2019/07/03 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
计算机通信专业推荐信
2014/02/22 职场文书
大学生安全责任书
2014/07/25 职场文书
护士节演讲稿开场白
2014/08/25 职场文书
十月围城观后感
2015/06/08 职场文书
治庸问责工作总结
2015/08/11 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书
如何用vue实现网页截图你知道吗
2021/11/17 Vue.js
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL
Hive日期格式转换方法总结
2022/06/25 数据库