python保留excel格式_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()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值