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催化剂重拾武器,在现有众多插件没提供到位的部分场景中,给予支持和补充,做到人有我优,人无我有的 ...
随机推荐
- ruby 数组与散列
def say_goodnight(name) result ="Good night ." +name return result end def say_goodmorning ...
- 【摘自张宴的"实战:Nginx"】Nginx的server指令
server 语法:server name[parameters] 默认值:none 使用环境:upstream 该指令用于指定后端服务器的名称和参数.服务器的名称可以是一个域名.一个IP地址.端口号 ...
- session,cookie总结
不同的域名生成的session_id是不一样的,(就算是相同的主域,例如:www.test.com, blog.test.com 都不一样); 相同的主域,不同的二级域名,例如www和blog都是不共 ...
- Linux 大页面使用与实现简介(转)
引言 随着计算需求规模的不断增大,应用程序对内存的需求也越来越大.为了实现虚拟内存管理机制,操作系统对内存实行分页管理.自内存“分页机制”提出之始,内存页面的默认大小便被设置为 4096 字节(4KB ...
- jQuery AJAX 函数
jQuery 拥有供 AJAX 开发的丰富函数(方法)库. 什么是 AJAX? AJAX = Asynchronous JavaScript and XML. AJAX 是一种创建快速动态网页的技术. ...
- DingTalk机器人C#代码
前面已经介绍了机器人的事情,今天直接贴一下代码. using System; using System.Collections.Generic; using System.ComponentModel ...
- [译]学习Javascript的工具
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
- [译]Javascript的弱点
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
- java.io.FileNotFoundException: res/drawable/title_bar_shadow.9.png
ERROR/AndroidRuntime(803): Caused by: java.io.FileNotFoundException: res/drawable/title_bar_shadow.9 ...
- web网站第一次加载慢的解决方法
找到对应的应用程序池 将高级设置里的 闲置超时改为0