python保留格式匯總各部門excel內容的實現思路
使用pthon匯總各部門的excel內容,主要思路:
1.使用pandas讀入匯總表(b3df)和其中一個部門的表格內容(dedf)
2.填充pandas空值,使'項目名稱','主管部門'列沒有空值
3.使用xlwings打開匯總表(b3ws)和部門表(dews)
4.用b3df、dedf對比兩個表中項目的行數是否一樣,不一樣則在匯總表(b3ws)插入行,使匯總表和部門表格(dews)一致
5.復制部門表格(dews)內容到匯總表(b3ws)
6.保存退出
匯總表格如下:

匯總A、B、C、D部門后的表格如下:

具體代碼如下:
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內容內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python人臉識別第三方庫face_recognition接口說明文檔
Python人臉識別第三方庫face_recognition接口簡單說明,及簡單使用方法2019-05-05
pyspark創(chuàng)建DataFrame的幾種方法
為了便于操作,使用pyspark時我們通常將數據轉為DataFrame的形式來完成清洗和分析動作。那么你知道pyspark創(chuàng)建DataFrame有幾種方法嗎,下面就一起來了解一下2021-05-05
python中pandas.read_csv()函數的深入講解
這篇文章主要給大家介紹了關于python中pandas.read_csv()函數的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03
解決pycharm無法刪除invalid interpreter(無效解析器)的問題
這篇文章主要介紹了pycharm無法刪除invalid interpreter(無效解析器)的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07

