当工作碰到需要将几个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,最后结果: