当工作碰到需要将几个excel合并时,比如一个表,收集每个人的个人信息,陆续收回来就是十几张甚至几十张表,少了还好解决,但是很多的话就不能一个一个去复制了,这时候就想到了python,Python大法好啊。短短100行代码解决,无论几十张,几百张表,瞬间搞定。
首先需要安装两个模块:xlrd(读取excel),xlsxwriter(写入excel)
pip install xlrd
pip install xlsxwriter
安装好以后,直接上代码。如下:
1 # -*- coding: UTF-8 -*-
2 # Filename : Merge_excel.py
3 # author by : Awrrays
4
5 import xlrd,xlsxwriter
6
7 # 打开表格
8 def openxls(file):
9 try:
10 fx = xlrd.open_workbook(file)
11 return fx
12 except Exception as e:
13 print('读取文件错误,错误为:{0}'.format(e))
14
15 # 获取所有sheet
16 def getsheets(fx):
17 return fx.sheets()
18
19 # 获取某个sheet的行数
20 def getrows(fx,sheet_num):
21 table = fx.sheets()[sheet_num]
22 rows = table.nrows
23 return rows
24
25 # 获取某个文件的内容并返回所有行的内容
26 def getdump(fl,sheet_num):
27 fx = openxls(fl)
28 table = fx.sheet_by_name(sheet_name[sheet_num])
29 row_num = getrows(fx,sheet_num)
30 row_len = len(rows)
31 for row in range(0,row_num):
32 data = table.row_values(row)
33 rows.append(data)
34 dump.append(rows[row_len:])
35 return dump
36 # 定义要合并的所有文件
37 allxls = ["E:/test/test1.xlsx",'E:/test/test2.xlsx','E:/test/test3.xlsx']
38 # 定义合并后的文件
39 endxls = "E:/test/test.xlsx"
40
41 # 存储一个sheet的结果
42 sheet_value = []
43 # 存储各sheet的名称
44 sheet_name = []
45 # 存储一行内容
46 rows = []
47 # 存储所有读取的结果
48 dump = []
49
50 # 读取第一个待读文件,获取sheet数
51 fx = openxls(allxls[0])
52 sheets = getsheets(fx)
53 x = 0
54 for sheet in sheets:
55 sheet_name.append(sheet.name)
56 sheet_value.append([])
57 x += 1
58
59 # 依次读取各sheet的内容
60 for sheet_num in range(0,x):
61 # 依次获取每个文件当前sheet的内容
62 for fl in allxls:
63 print('正在读取文件{0}的第{1}个标签....'.format(fl,sheet_num))
64 dump = getdump(fl,sheet_num)
65 sheet_value[sheet_num].append(dump)
66
67 file_num = len(allxls)
68 endvlue = []
69
70 # 获取各sheet的内容
71 def get_sheet_value(k):
72 for z in range(k,k+file_num):
73 endvlue.append(sheet_value[0][0][z])
74 return endvlue
75
76 # 打开合并完成后的文件
77 wb = xlsxwriter.Workbook(endxls)
78 # 创建一个工作表
79 ws = wb.add_worksheet()
80 polit = 0
81 line_num = 0
82 # 依次遍历每个sheet中的内容
83 for s in range(0,x * file_num,file_num):
84 file_value = get_sheet_value(s)
85 table_value = file_value[polit:]
86 # 将每一个sheet中的内容写入新文件
87 for a in range(0,len(table_value)):
88 # 将sheet行写入到新文件
89 for b in range(0,len(table_value[0])):
90 # 将每一行的内容写入新文件
91 for c in range(0,len(table_value[0][0])):
92 data = table_value[a][b][c]
93 ws.write(line_num,c,data)
94 line_num += 1
95 # 设置分隔点
96 polit = len(file_value)
97 wb.close()
ok,最后结果:
来源:oschina
链接:https://my.oschina.net/u/4311876/blog/3425225