以下都是我学习CSDN里面的各位大神的分享:
我主要参考目标-主体和弹窗
次要参考-进度显示
1、可以弹窗选择需要合并的文件所在文件夹;
2、可以设置excel的子项页签数量;
3、可以合并xls、xlsx格式;
注意:xlrd 版本要选择1.2的,不要用最新的,最新的不支持XLSX
# 1 引入库
import tkinter as tk #选择文件夹功能用到的库
from tkinter import filedialog #弹出文件框,选择需要合并的文件所在的文件夹
import os #扫描文件夹中的文件用到的库
import xlrd #读取Excel文件的包
import xlsxwriter #将文件写入Excel的包
# 3.1 打开文件
#打开excel
def OpenExcelxlsx(Filepath):
try:
file=xlrd.open_workbook(Filepath)
return file
except Exception as e:
print(e)
# 3.2 获取excel文件信息
# 获取Excel中所有的sheet
def GetAllSheets(file):
return file.sheets()
# 获取某个sheet表的行数
def GetAllRows(table):
return table.nrows
# 3.3 读取所有文件的所有数据
#读取文件内容
def GetContent(excel,sheetNo):
content=list() #声明一个变量,用于存数据
try:
sheets=GetAllSheets(excel) #对每个excel文件,获知它sheet的数量
table=sheets[sheetNo] #对某个sheet进行操作
except Exception as e: #异常处理
print(e) #打印异常信息
rows=GetAllRows(table) #某个sheet表格的行数
for i in range(rows): #对每一行数据进行如下操作
data=table.row_values(i) #提取该行的数据
content.append(data) #将提取的数据存在list列表中
return content #操作完成后,将提取的数据进行返回
# 3.4 将读取的文件写入到新文件中
# 所有的Excel的所有sheets变成一个sheet
def Sum1(fileName, data):
finalFile = xlsxwriter.Workbook(fileName) # 创建一个工作表文件
sheet = finalFile.add_worksheet() # 为该工作表添加一个sheet
count = 0 # 由于每个sheet的数据数目不一样,因此需要计数
for sheetId in range(len(data)):
for row in range(len(data[sheetId])):
for col in range(len(data[sheetId][row])):
d = data[sheetId][row][col] # 提取数据
sheet.write(count, col, d) # 将数据存入新文件中 <行,列,数据>
count = count + 1 # 汇总文件中的行数+1
finalFile.close() # 文件要进行关闭
if __name__ == '__main__':
'''打开选择文件夹对话框'''
# 2 选择待合并文件所在的文件夹
root = tk.Tk() #初始化弹出文件库所需要的库
root.withdraw() #不加这个选择框消失不了
folderPath = filedialog.askdirectory() #获得选择好的文件夹
# 3 读取所在文件夹中的xls文件,并进行合并
data = list() # 声明一个list变量,用来存数据,也可以用data=[]来初始化
fileSet = os.listdir(folderPath) # 扫描所选文件夹中所有文件
for file in fileSet:
if file.endswith('.xlsx'): # 选择xls文件进行后续操作
try:
excel = OpenExcelxlsx(folderPath + '/' + file) # 打开excel文件
except Exception as e:
print(e) # 异常处理,避免程序无脑崩溃:如果打开失败就打印失败信息
sheets = GetAllSheets(excel) # 获取excel文件中所有sheet
for i in range(1): # 对第一个sheet进行数据提取
# for i in range(len(sheets)): # 对每个sheet进行数据提取,所有子表
print("正在读取文件:" + str(file) + "的第" + str(i) + "个sheet表的内容...")
data.append(GetContent(excel, i)) # 使用append方法将所有数据存起来
fileName = str('/bom表.xlsx') # 合并后的文件
finalFilePath = folderPath + fileName # 给文件名加上文件目录,这样汇总文件就出现在当前目录了
Sum1(finalFilePath, data) # 将data中收集的数据存入到新建的文件夹中
print("excel合并完成")
这是我第一次在CSDN上面发表,感谢所有参与分享技术的大佬;
后面我会继续学习,因为现在还没完全满足我的使用需求,还需要手动操作表格,
如果有大佬可以分享一下就太好了,以下是我的疑问:
1、判断表头重复
2、判断列重复
3、除了表头重复,不同表格的指定列还存在重复即不考虑此表,并提示表格名称。