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催化剂重拾武器,在现有众多插件没提供到位的部分场景中,给予支持和补充,做到人有我优,人无我有的 ...
随机推荐
- C#简单的图片合成及防止并发的办法
/// <summary> /// 合成图 /// </summary> private string ComposeCarBrandBadImage(AnonAttachme ...
- Centos7安装mysql缺乏yum源怎么安装
找到mysql5.6的centos的repo源,终于解决mysql的安装问题: 1.确保centos安装了wget,没有的话安装wget 1 yum install wget 2.下载mysql的 ...
- Overloaded的方法是否可以改变返回值的类型
摘要: 重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同) Overload是重载的意思,Override是覆盖的意思,也就是重写. 重载 ...
- IIC协议解释
IIC协议解释 (1)概述 I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量 ...
- register的功能
register:这个关键字请求编译器尽可能 的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率.这里注意是尽可能,不是绝对.你想想,一个CPU拥有 的寄存器也就那么几个或几十个,你要 ...
- maven-排除传递依赖-exclusions
在maven项目中引用dubbo的maven依赖的时候会引入dubbo中传递依赖的spring的依赖包如下: <!-- dubbo相关的jar包 --> &l ...
- 基于C#局域网语音聊天
基于C#局域网语音聊天室,可实现文本消息的发送.接收及语音聊天,是一个很不错的,适合初学者的软件开发 ...
- winform GDI基础(一)
1获取画布 (1)从PaintEventArgs类中获取画布 private void Form1_Paint(object sender, PaintEventArgs e) { Graphics ...
- WebStorm设置Themes
1.首先去 http://www.phpstorm-themes.com/ 选择你喜欢的主题,保存对应主题的xml文件到你本地 2.打开C:\Users\Administrator\.WebStor ...
- Java NIO学习笔记
Java NIO学习笔记 一 基本概念 IO 是主存和外部设备 ( 硬盘.终端和网络等 ) 拷贝数据的过程. IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成. 所有语言运行时系统提供执 ...