年度了,要對每個月的數據進行總的匯總,去計算每消耗品的使用情況,表格都在一個工作表的不同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
執行結果:
最終表格(格式我沒有調整的):



