```# -*- 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(['姓名','工资','工资实发','年度'])#给汇总表添加标题,标题名按照提取表的字段来命名
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) # 加载已经存在的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)
#此循环取需要获取的行数范围,其中的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 == '工资实发':
d = j.column
print(d)
# 此循环取需要获取的列数,其中的姓名、工资和工资实发为列位置定位
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['工资实发']=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)
# 此循环为将需要获取的列字段对应的行数范围值取出来
max_row = sheet1.max_row #取汇总表的行数
print(max_row)
for row in test_case:
sheet1.append(row)
# 此循环为 将数据追加到汇总表中
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 需要根据实际情况更改
# 此循环为 生成一列,将表名作为数据追加到列中
workbook1.save('C:/Users/Administrator/Desktop/汇总.xlsx')
结束
附记
#定位含有某字符串的单元格
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格式表转成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的文件