```# -*- coding:utf-8 -*-
import openpyxl
import xlrd
import os.path
import time
workbook1 = openpyxl.load_workbook('C:/Users/Administrator/Desktop/匯總.xlsx')#提前建一個匯總的表
name_list = workbook1.sheetnames #獲取提前建一個匯總的表的sheet表名
sheet1 = workbook1[name_list[0]]#取第一個sheet表
sheet1.append(['姓名','工資','工資實發(fā)','年度'])#給匯總表添加標(biāo)題,標(biāo)題名按照提取表的字段來命名
path = 'C:/Users/Administrator/Desktop/匯總excel/'#需要匯總表的文件夾位置
file_list = os.listdir(path)? # 獲取這個文件夾下所有的excel文檔聂薪。
for file in file_list:
? ? if os.path.splitext(file)[1]=='.xlsx':? #獲取所有xlsx的文件
? ? ? ? workbook = openpyxl.load_workbook(path+file)? # 加載已經(jīng)存在的excel
? ? ? ? name_list = workbook.sheetnames #獲取所有的sheet表名
? ? ? ? sheet = workbook[name_list[0]]#取第一個sheet表
? ? ? ? #print(sheet.dimensions) 獲取所有表的范圍 A1:O24
? ? ? ? cell = sheet['A']
? ? ? ? for i in cell:
? ? ? ? ? ? if i.value == '序號':
? ? ? ? ? ? ? ? a = i.row
? ? ? ? ? ? ? ? print(a)
? ? ? ? ? ? elif i.value == '合計':
? ? ? ? ? ? ? ? b = i.row
? ? ? ? ? ? ? ? print(b)
? ? ? ? #此循環(huán)取需要獲取的行數(shù)范圍衙猪,其中的A列猫缭、序號和合計為起始位置定位? ? ?
? ? ? ? cell1 = sheet[sheet.dimensions]
? ? ? ? for i in cell1:
? ? ? ? ? ? for j in i:
? ? ? ? ? ? ? ? if j.value == '姓名':
? ? ? ? ? ? ? ? ? ? e = j.column
? ? ? ? ? ? ? ? ? ? print(e)
? ? ? ? ? ? ? ? elif j.value == '工資':
? ? ? ? ? ? ? ? ? ? c = j.column
? ? ? ? ? ? ? ? ? ? print(c)
? ? ? ? ? ? ? ? elif j.value == '工資實發(fā)':
? ? ? ? ? ? ? ? ? ? d = j.column
? ? ? ? ? ? ? ? ? ? print(d)
? ? ? ? # 此循環(huán)取需要獲取的列數(shù)歼培,其中的姓名毅往、工資和工資實發(fā)為列位置定位? ? ? ? ? ? ? ? ?
? ? ? ? test_case=[]
? ? ? ? for row in range(a+2,b):
? ? ? ? ? ? sub_data={}
? ? ? ? ? ? sub_data['姓名']=sheet.cell(row,e).value
? ? ? ? ? ? sub_data['工資']=sheet.cell(row,c).value
? ? ? ? ? ? sub_data['工資實發(fā)']=sheet.cell(row,d).value
? ? ? ? ? ? #print(list(sub_data.keys()))
? ? ? ? ? ? ll=list(sub_data.values())
? ? ? ? ? ? #print(ll)
? ? ? ? ? ? test_case.append(ll)
? ? ? ? print (file)?
? ? ? ? #print("讀取到的所有測試用例:",test_case)
? ? ? ? # 此循環(huán)為將需要獲取的列字段對應(yīng)的行數(shù)范圍值取出來
? ? ? ? max_row = sheet1.max_row #取匯總表的行數(shù)
? ? ? ? print(max_row)?
? ? ? ? for row in test_case:
? ? ? ? ? ? sheet1.append(row)
? ? ? ? # 此循環(huán)為 將數(shù)據(jù)追加到匯總表中
? ? ? ? hang = list(range(max_row+1,max_row+b-a-1))
? ? ? ? for i in hang:
? ? ? ? #print(hang)
? ? ? ? ? ? sheet1.cell(row=i,column=4,value=file)#column=4 需要根據(jù)實際情況更改
? ? ? ? # 此循環(huán)為 生成一列十艾,將表名作為數(shù)據(jù)追加到列中?
? ? ? ? workbook1.save('C:/Users/Administrator/Desktop/匯總.xlsx')
結(jié)束
附記
#定位含有某字符串的單元格
cell = sheet['A']
? ? ? ? for i in cell:
? ? ? ? ? ? if i.value == '序號':
? ? ? ? ? ? ? ? a = i.row
? ? ? ? ? ? ? ? print(a)
? ? ? ? ? ? elif '填表' in str(i.value): #查找含有填表字符串的位置
? ? ? ? ? ? ? ? b = i.row
? ? ? ? ? ? ? ? print(b)
附記
#將非xlsx格式表轉(zhuǎn)成xlsx
path = 'C:/Users/Administrator/Desktop/匯總excel/'#需要匯總表的文件夾位置
file_list = os.listdir(path)? # 獲取這個文件夾下所有的excel文檔漾稀。
for file in file_list:
????? file_name,suff=os.path.splitext(file)
????? if suff =='xls':
????????????? data=pd.DataFrame(pd.read_excel(path+"/"+file))
????????????? data.to_excel(path+"/"+file_name+".xlsx",index=False)
??? ?? if os.path.splitext(file)[1]=='.xlsx':? #獲取所有xlsx的文件?