python解决excel工作薄合并处理
年度了,要对每个月的数据进行总的汇总,去计算每消耗品的使用情况,表格都在一个工作表的不同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工作薄合并处理的更多相关文章
- python解决excel工作薄合并处理(openpyxl处理excel2010以上版本)
前段时间使用xlrd.xlwt对文件进行处理(https://www.cnblogs.com/pinpin/p/10287491.html),但是只能处理excel2010以下版本,所以又写了个处理e ...
- 如何把一个excel工作薄中N个工作表复制到另一个工作薄中
一般遇到标题这样的情况,许多人可能会一个一个的复制粘贴,其实完全不必那么麻烦. 你可以按以下步骤来操作: 第一步:打开所有要操作的excel工作薄\n 第二步:按住Shift键,选择所有要复制的工作表 ...
- java生成简单Excel工作薄
前言: 代码都是建立在实际需求上的,上周做完一个调外部电影券接口的项目,这周产品又要excel表格,大致内容为:券所属影院.图片URL.等信息制作为excel表格,把每次同步过来的数据给他分析. jx ...
- VBA基础之Excel 工作薄(Book)的操作(三)
三. Excel 工作薄(Book)的操作1. Excel 创建工作薄(Book) Sub addWorkbook() Workbooks.Add End Sub 2. Excel 打开工作薄(Boo ...
- 获取Excel工作薄中Sheet页(工作表)名集合
#region 获取Excel工作薄中Sheet页(工作表)名集合 02./// <summary> 03./// 获取Excel工作薄中Sheet页(工作表)名集合 04./// < ...
- 合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友_python
这时候还需要把各个工作表合并到一起来形成一个汇总表.这时候比较麻烦也比较容易出错,因为各个表的学号不一定都是一致的.对齐的.因为可能会有人缺考,有人会考号涂错等等.特奉献以下代码,用于合并学生成绩表或 ...
- 如何解决excel工作簿保护密码
自己的excel文档设置了“保护工作簿”密码,但是密码又忘记了,怎么办? 如果你会编写代码,那么这个问题非常好解决.Excel内置功能不能解决的事儿,自己编写一段代码或许就可以搞定了. 第一步,大家已 ...
- C# 解决EXCEL单元格合并,行高无法自适应问题
解决方法:根据单元格内容长度,设置单元格所在行的行高 public static float getExcelCellAutoHeight(string strtest, float fontCoun ...
- 个人永久性免费-Excel催化剂功能第53波-无比期待的合并工作薄功能
合并工作薄.工作表功能,几乎每一款Excel插件都提供,而且系列衍生功能甚至有多达10多个.今天Excel催化剂重拾武器,在现有众多插件没提供到位的部分场景中,给予支持和补充,做到人有我优,人无我有的 ...
随机推荐
- IDEA01 创建java项目、创建web项目
注意:本教程使用的开发环境是:(专业版) 1 创建javaSE项目 1.1 file -> new -> project 注意:如果是第一次使用,就需要配置 project SDK , ...
- ruby 数组与散列
def say_goodnight(name) result ="Good night ." +name return result end def say_goodmorning ...
- VMware内部错误解决办法
虚拟机内部错误,不要担心不是致命错误,往往是由于你的配置被禁用了或者VMware运行权限不够导致 检查你的VMware虚拟网卡是否被禁用 检查你的VMware的运行权限,直接管理员运行就够够的了
- JavaPersistenceWithHibernate第二版笔记-第六章-Mapping inheritance-004Table per class hierarchy(@Inheritance..SINGLE_TABLE)、@DiscriminatorColumn、@DiscriminatorValue、@DiscriminatorFormula)
一.结构 You can map an entire class hierarchy to a single table. This table includes columns for all pr ...
- Luogu 4777 【模板】扩展中国剩余定理(EXCRT)
复习模板. 两两合并同余方程 $x\equiv C_{1} \ (Mod\ P_{1})$ $x\equiv C_{2} \ (Mod\ P_{2})$ 把它写成不定方程的形式: $x = C_{1} ...
- Mysql--连接查询
内连接查询 意义:找到表和表之间的关系或者是桥梁.连接查询是查询两个或者两个以上的表时使用的. JOIN|CROSS JOIN| INNER JOIN 通过ON 连接条件(这三个方式都行)一般 ...
- java Linkedhashmap源码分析
LinkedHashMap类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是插入次序,或者是最近最少使用(LRU)的次序.只比HashMap慢一点:而在迭代访问时反而更快,因为它使用链表维 ...
- 并发编程学习笔记之可见性&过期数据(二)
想要使用多线程编程,有一个很重要的前提,那就是必须保证操纵的是线程安全的类. 那么如何构建线程安全的类呢? 1. 使用同步来避免多个线程在同一时间访问同一数据. 2. 正确的共享和安全的发布对象,使多 ...
- 在OnRowDataBound或OnItemDataBound事件中获取字段值
不管是在GridView,DataList还是Repeater控件中,其中Repeater控件,没有DataKeyNames或是DataKeyField属性,想获取记录的主键值,只好用Label或是H ...
- Go语言技术教程:Redis介绍安装和使用
Redis介绍 我们日常的开发,数据都需要进行持久化存储,常见的持久化存储有很多种,比如数据库,文件,计算机内存,甚至云服务器等都是持久化存储数据的方式.而就数据库而言,经常又会被人们分为关系型数据库 ...