年度了,要对每个月的数据进行总的汇总,去计算每消耗品的使用情况,表格都在一个工作表的不同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

执行结果:

最终表格(格式我没有调整的):

python解决excel工作薄合并处理的更多相关文章

  1. python解决excel工作薄合并处理(openpyxl处理excel2010以上版本)

    前段时间使用xlrd.xlwt对文件进行处理(https://www.cnblogs.com/pinpin/p/10287491.html),但是只能处理excel2010以下版本,所以又写了个处理e ...

  2. 如何把一个excel工作薄中N个工作表复制到另一个工作薄中

    一般遇到标题这样的情况,许多人可能会一个一个的复制粘贴,其实完全不必那么麻烦. 你可以按以下步骤来操作: 第一步:打开所有要操作的excel工作薄\n 第二步:按住Shift键,选择所有要复制的工作表 ...

  3. java生成简单Excel工作薄

    前言: 代码都是建立在实际需求上的,上周做完一个调外部电影券接口的项目,这周产品又要excel表格,大致内容为:券所属影院.图片URL.等信息制作为excel表格,把每次同步过来的数据给他分析. jx ...

  4. VBA基础之Excel 工作薄(Book)的操作(三)

    三. Excel 工作薄(Book)的操作1. Excel 创建工作薄(Book) Sub addWorkbook() Workbooks.Add End Sub 2. Excel 打开工作薄(Boo ...

  5. 获取Excel工作薄中Sheet页(工作表)名集合

    #region 获取Excel工作薄中Sheet页(工作表)名集合 02./// <summary> 03./// 获取Excel工作薄中Sheet页(工作表)名集合 04./// < ...

  6. 合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友_python

    这时候还需要把各个工作表合并到一起来形成一个汇总表.这时候比较麻烦也比较容易出错,因为各个表的学号不一定都是一致的.对齐的.因为可能会有人缺考,有人会考号涂错等等.特奉献以下代码,用于合并学生成绩表或 ...

  7. 如何解决excel工作簿保护密码

    自己的excel文档设置了“保护工作簿”密码,但是密码又忘记了,怎么办? 如果你会编写代码,那么这个问题非常好解决.Excel内置功能不能解决的事儿,自己编写一段代码或许就可以搞定了. 第一步,大家已 ...

  8. C# 解决EXCEL单元格合并,行高无法自适应问题

    解决方法:根据单元格内容长度,设置单元格所在行的行高 public static float getExcelCellAutoHeight(string strtest, float fontCoun ...

  9. 个人永久性免费-Excel催化剂功能第53波-无比期待的合并工作薄功能

    合并工作薄.工作表功能,几乎每一款Excel插件都提供,而且系列衍生功能甚至有多达10多个.今天Excel催化剂重拾武器,在现有众多插件没提供到位的部分场景中,给予支持和补充,做到人有我优,人无我有的 ...

随机推荐

  1. Node.js的__dirname,__filename,process.cwd(),./的含义

    简单说一下这几个路径的意思,: __dirname: 获得当前执行文件所在目录的完整目录名 __filename: 获得当前执行文件的带有完整绝对路径的文件名 process.cwd():获得当前执行 ...

  2. IP地址在mysql的存储

    因为int比varchar(15)更高效,且php和mysql都有ip和int互转的函数,所以在ip地址在mysql中用int存储最优. mysql存储这个值是字段需要用int UNSIGNED.不用 ...

  3. 关于 block的一些浅识

    block的定义:“带自动变量的匿名函数” (一)写法: ^ void (int iAge){ NSLog(@"%d", iAge);}; 和C函数写法区别在于: 1) :以插入符 ...

  4. Luogu 3332 [ZJOI2013]K大数查询

    BZOJ 3110 很早就想写的试炼场题. 不会整体二分啊呜呜呜,只能写写树套树. 有一个trick就是外层使用一个权值线段树,把位置作为下标的线段树放在内层,这样子的话我们在查询$k$大的时候就可以 ...

  5. cross validation

    k-folder cross-validation:k个子集,每个子集均做一次测试集,其余的作为训练集.交叉验证重复k次,每次选择一个子集作为测试集,并将k次的平均交叉验证识别正确率作为结果.优点:所 ...

  6. angular 分页2

    http://www.alliedjeep.com/2547.htm AngularJS Code (Users.js) var Users = angular.module('Users', []) ...

  7. html5 canvas绘制矩形和圆形

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. HTTP状态码了解

    1xx   - - 消息 2xx   - - 成功 3xx   - - 重定向 4xx   - - 请求错误 5xx   - - 服务器错误 1xx-信息提示 这些状态代码表示临时的响应.客户端在收到 ...

  9. 1003. Check If Word Is Valid After Substitutions

    We are given that the string "abc" is valid. From any valid string V, we may split V into ...

  10. Percona5.6源码安装

    ---恢复内容开始--- 系统环境:CentOS 6.8 1.安装依赖包 yum install gcc-c++ make cmake bison bison-devel ncurses-devel ...