使用python合并excel

廉价感情. 提交于 2019-11-27 21:51:10

当工作碰到需要将几个excel合并时,比如一个表,收集每个人的个人信息,陆续收回来就是十几张甚至几十张表,少了还好解决,但是很多的话就不能一个一个去复制了,这时候就想到了python,Python大法好啊。短短100行代码解决,无论几十张,几百张表,瞬间搞定。

首先需要安装两个模块:xlrd(读取excel),xlsxwriter(写入excel)

pip install xlrd
pip install xlsxwriter

安装好以后,直接上代码。如下:

 1 import xlrd,xlsxwriter
 2 
 3 # 打开表格
 4 def openxls(file):
 5     try:
 6         fx = xlrd.open_workbook(file)
 7         return fx
 8     except Exception as e:
 9         print('读取文件错误,错误为:{0}'.format(e))
10 
11 # 获取所有sheet
12 def getsheets(fx):
13     return fx.sheets()
14 
15 # 获取某个sheet的行数
16 def getrows(fx,sheet_num):
17     table = fx.sheets()[sheet_num]
18     rows = table.nrows
19     return rows
20 
21 # 获取某个文件的内容并返回所有行的内容
22 def getdump(fl,sheet_num):
23     fx = openxls(fl)
24     table = fx.sheet_by_name(sheet_name[sheet_num])
25     row_num = getrows(fx,sheet_num)
26     row_len = len(rows)
27     for row in range(0,row_num):
28         data = table.row_values(row)
29         rows.append(data)
30     dump.append(rows[row_len:])
31     return dump
32 # 定义要合并的所有文件
33 allxls = ["E:/test/test1.xlsx",'E:/test/test2.xlsx','E:/test/test3.xlsx']
34 # 定义合并后的文件
35 endxls = "E:/test/test.xlsx"
36 
37 # 存储一个sheet的结果
38 sheet_value = []
39 # 存储各sheet的名称
40 sheet_name = []
41 # 存储一行内容
42 rows = []
43 # 存储所有读取的结果
44 dump = []
45 
46 # 读取第一个待读文件,获取sheet数
47 fx = openxls(allxls[0])
48 sheets = getsheets(fx)
49 x = 0
50 for sheet in sheets:
51     sheet_name.append(sheet.name)
52     sheet_value.append([])
53     x += 1
54 
55 # 依次读取各sheet的内容
56 for sheet_num in range(0,x):
57     # 依次获取每个文件当前sheet的内容
58     for fl in allxls:
59         print('正在读取文件{0}的第{1}个标签....'.format(fl,sheet_num))
60         dump = getdump(fl,sheet_num)
61     sheet_value[sheet_num].append(dump)
62 
63 file_num = len(allxls)
64 endvlue = []
65 
66 # 获取各sheet的内容
67 def get_sheet_value(k):
68     for z in range(k,k+file_num):
69         endvlue.append(sheet_value[0][0][z])
70     return endvlue
71 
72 # 打开合并完成后的文件
73 wb = xlsxwriter.Workbook(endxls)
74 # 创建一个工作表
75 ws = wb.add_worksheet()
76 polit = 0
77 line_num = 0
78 # 依次遍历每个sheet中的内容
79 for s in range(0,x * file_num,file_num):
80     file_value = get_sheet_value(s)
81     table_value = file_value[polit:]
82     # 将每一个sheet中的内容写入新文件
83     for a in range(0,len(table_value)):
84         # 将sheet行写入到新文件
85         for b in range(0,len(table_value[0])):
86             # 将每一行的内容写入新文件
87             for c in range(0,len(table_value[0][0])):
88                 data = table_value[a][b][c]
89                 ws.write(line_num,c,data)
90             line_num += 1
91     # 设置分隔点
92     polit = len(file_value)
93 wb.close()

 

ok,最后结果:

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!