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

    ---------------siwuxie095 工程名:TestUI 包名:com.siwuxie095.ui 类名:MyFrame.java 工程结构目录如下: 在 Source 界面和 Des ...

  2. go语言的源码文件的分类及含义

    Go源码文件:名称以.go为后缀,内容以Go语言代码组织的文件 多个Go源码文件是需要用代码包组织起来的 源码文件分为三类:命令源码文件.库源码文件(go语言程序) 测试源码文件(辅助源码文件) 命令 ...

  3. Vue02 样式的动态绑定

    daigengxin......2018-3-8 21:09:18 跟angular2类似,分为CSS类绑定和Style样式绑定两种方式,详情参见

  4. 关联映射、关联查询【重点掌握一条SQL语句的那种方法】

    1 什么叫关联映射 通过数据库对象之间的关联关系(一对一.一对多.多对多),反映到实体对象上之间的引用. 举例 用户实体类(User):user_id user_name user_token 笔记本 ...

  5. jetty启动常用命令

    1. 启动Jetty Server:运行命令:Java -jar start.jar    指定项目名称启动:   java -jar start.jar -Dname=zoush 保持jetty后台 ...

  6. ann

    转自 http://blog.csdn.net/yiluoyan/article/details/45308785 这篇文章接着之前的车牌识别,从输入的车图片中分割识别出车牌之后,将进行下一步:车牌号 ...

  7. 715B Complete The Graph

    传送门 题目大意 给出一个图,一些边带权,另一些边等待你赋权(最小赋为1).请你找到一种赋权方式,使得 s 到 t 的最短路为 L n ≤ 1e3 ,m ≤ 1e4 ,L ≤ 1e9 分析 二分所有边 ...

  8. 196D The Next Good String

    传送门 题目大意 给定n和一个字符串,求一个新字符串使得这个字符串不存在长度大于等于n的回文子串且在字典序大于原串的情况下最小. 分析 我们知道如果有一个长度为n+2的回文串,那它一定由一个长度为n的 ...

  9. Mat 类的内存管理

    使用 Mat 类,内存管理变得简单,不再像使用 IplImage 那样需要自己申请和释放内存.虽然不了解 Mat 的内存管理机制,也无碍于 Mat 类的使用,但是如果清楚了解 Mat 的内存管理,会更 ...

  10. SDUT 3375 数据结构实验之查找三:树的种类统计

    数据结构实验之查找三:树的种类统计 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 随着卫星成 ...