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

猜你喜欢

转载自www.cnblogs.com/pinpin/p/10287491.html