应工作需要。写了一个python实现的对文件夹下的所有excel表格汇总的小工具,现将源码发布,希望能给后来人参考。
import xlrd
import os
import xlwt
from xlutils.copy import copy
from tkinter import *
file_dir = 'C:\\Users\\admin\\Desktop\\excel'
def get_allfile_msg(file_dir):
for root, dirs, files in os.walk(file_dir):
return root, dirs, files
root, dirs, files = get_allfile_msg(file_dir)
def get_allfile_url(root, files):
i = 0 #文件数量
allFile_url = []
for f in files:
i += 1
if i == len(files):
break
file_url = root + '\\' + f
allFile_url.append(file_url)
return allFile_url
allFile_url = get_allfile_url(root, files)
def all_to_one(root, allFile_url, file_name='allExcel.xls', title=None):
file_name = root + '\\' + file_name
create_excel(file_name, title)
list_row_data = []
for f in allFile_url:
e1.insert(END,'打开%s' % f,'\n','\n')
excel = xlrd.open_workbook(f)
table = excel.sheet_by_index(0)
e1.insert(END,'该文件行数为:%d,列数为:%d' % (table.nrows,table.ncols),'\n','\n')
for i in range(table.nrows):
if i == 0:
i += 1
continue
row = table.row_values(i)
list_row_data.append(row)
e1.insert(END,'总数据量为%d' % len(list_row_data),'\n','\n')
add_row(list_row_data, file_name)
def create_excel(file_name, title):
e1.insert(END,'创建文件%s' % file_name,'\n','\n')
a = xlwt.Workbook()
table = a.add_sheet('sheet1', cell_overwrite_ok=True)
for i in range(len(title)):
table.write(0, i, title[i])
a.save(file_name)
file_name = 'DO测试数据汇总.xls'
title = ['条码内容','故障通道']
def add_row(list_row_data, file_name):
allExcel1 = xlrd.open_workbook(file_name)
sheet = allExcel1.sheet_by_index(0)
allExcel2 = copy(allExcel1)
sheet2 = allExcel2.get_sheet(0)
i = 0
for row_data in list_row_data:
for j in range(len(row_data)):
sheet2.write(sheet.nrows + i, j, row_data[j])
i += 1 #覆盖原文件
allExcel2.save(file_name)
e1.insert(END,'合并完成','\n','\n')
win = Tk()
win.title('Excel数据汇总')
btu = Button(win,text = '开始汇总',command = lambda :all_to_one(root, allFile_url, file_name=file_name, title=title)).grid(row=2, column=0,pady=5)
e1 = Text(win,width=50,height=25,bg = 'green')
e1.grid(row=1, column=0,pady=5)
win.resizable(0, 0) # 阻止Python GUI的大小调整
win.mainloop()
e1.insert(END,'当前目录路径:',root,'当前路径下所有子目录',dirs,'当前路径下所有非目录子文件 ',files)
参考地址:https://blog.csdn.net/imagine_dragon/article/details/78025144