zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Hibernate延迟加载机制
    Hibernate中Criteria的完整用法
    HibernateTemplate的常规用法
    Java各类在线API
    HibernateTemplate的常规用法
    Hibernate中Criteria的完整用法
    Java各类在线API
    Hibernate3的DetachedCriteria使用
    Hibernate延迟加载机制
    Hibernate3的DetachedCriteria使用
  • 原文地址:https://www.cnblogs.com/pinpin/p/10287491.html
Copyright © 2011-2022 走看看