python解決excel工作薄合並處理


年度了,要對每個月的數據進行總的匯總,去計算每消耗品的使用情況,表格都在一個工作表的不同sheet中,並且格式相同,所以就用python寫了這個小腳本,現在把腳本粘貼出來,以后有需要就可以在此基礎上改改就好了。

下圖是表格樣式,數據我做了些變更,一個意思的。

image

說明:我們要用規格型號列作為唯一識別,'對比的列':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 

執行結果:

image

最終表格(格式我沒有調整的):

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM