年度了,要对每个月的数据进行总的汇总,去计算每消耗品的使用情况,表格都在一个工作表的不同sheet中,并且格式相同,所以就用python写了这个小脚本,现在把脚本粘贴出来,以后有需要就可以在此基础上改改就好了。
下图是表格样式,数据我做了些变更,一个意思的。
说明:我们要用规格型号列作为唯一识别,'对比的列':3(实际是第四列)
'求和计算列1','求和计算列2','求和计算列’:5,6,7
代码:
1 import tkinter 2 import xlrd,xlwt 3 4 def join_table(file_dir,newfile_dir,num,a,*v_arg): #参数说明:file_dir(要合并表格的绝对位置,num(列表标题相同的行数),,*v_arg(对比的列)) 5 list1 = [] 6 list2 = ['', '', '', '', '', '', '', '', '', '', '', '', ''] 7 list3 = [] 8 data = xlrd.open_workbook(file_dir) 9 10 #表头信息 11 table1 = data.sheets()[0] 12 nrows = table1.nrows 13 for i in range(nrows): 14 if i < num: 15 list3.append(table1.row_values(i)) #将数据添加到列表中 16 17 #表身内容 18 table = data.sheets() 19 for j in table: 20 nrows = j.nrows 21 for i in range(nrows): 22 if i < num: 23 continue 24 if j.row_values(i) == list2: #表格中最后的数据为空的时候将不再读取 25 break 26 list1.append(j.row_values(i)) #将数据添加到列表中 27 28 #相同数据进行相加 29 for x in range(len(list1)): 30 for y in range(len(list1)-1,x,-1): 31 if list1[x][a] == list1[y][a]: 32 print(list1[0][8]) 33 for z in v_arg: 34 z = int(z) 35 if list1[x][z]=="": 36 list1[x][z] += str(list1[y][z]) 37 else: 38 list1[x][z] += list1[y][z] 39 list1.remove(list1[y]) 40 41 #保存合并数据到新表格 42 workbook = xlwt.Workbook() #创建新的表格对象 43 sheet1 = workbook.add_sheet('汇总.xls',cell_overwrite_ok=True) #创建表格中的sheet 44 45 n = 0 46 for y in list3: #列举出每行的数据 47 for z in range(len(y)): #计算总共的列数 48 sheet1.write(n,z,y[z]) #循环将列表中的数据到导入到一个表格中 49 n += 1 50 for x in list1: #列举出每行的数据 51 for m in range(len(x)): #计算总共的列数 52 sheet1.write(n,m,x[m]) #循环将列表中的数据到导入到一个表格中 53 n += 1 54 55 workbook.save(newfile_dir) 56 57 if __name__=='__main__': 58 root = tkinter.Tk() 59 root.geometry("400x200") 60 root.title('表格合并处理') 61 test_content = ['原excel文件','新excel文件地址加名称','表格头部相同的行数','对比的列','求和计算列1','求和计算列2','求和计算列3'] 62 v_list = [] 63 v = [] 64 v_arg = [] 65 for i in range(len(test_content)): 66 tkinter.Label(root,text=test_content[i]).grid(row=i,column=0) 67 v.append(tkinter.StringVar()) 68 ent = tkinter.Entry(root,textvariable=v[i]) 69 ent.grid(row=i,column=2) 70 71 def show(): 72 for i in range(len(test_content)): 73 v_list.append(v[i].get()) 74 file_dir,newfile_dir,num,a,b,c,d = v_list 75 v_arg = b,c,d 76 num,a,b,c,d = int(num),int(a),int(b),int(c),int(d) 77 78 79 join_table(file_dir,newfile_dir,num,a,*v_arg) 80 81 tkinter.Button(root,text='获取信息',command= show).grid(row=7,column=0) 82 tkinter.Button(root,text='取消',command= root.quit).grid(row=7,column=1) 83 root.mainloop() 84 85
执行结果:
最终表格(格式我没有调整的):