工作中要求收集每个人的信息并合并到一个excel文件里。
发出来的模板表格都是xls格式的,所以收集到的模板也都是xls格式的。
简简单单的工具,没有做什么优化和容错处理,仅仅实现了我要的功能而已。
思路:选择文件夹,合并文件夹里所有文件到新文件里,删除不需要的行。
主函数包括2个函数:合并文件,删除行
1.通过合并文件的函数MergeXlsFile获取dirPath
2.传给删除行的函数del_rows
if __name__ == "__main__":
dirPath=MergeXlsFile.MergeFile()
del_rows.delRows(dirPath)
合并文件MergeXlsFile函数:
1.通过对话框选择文件夹
2.创建新文件保存合并后的结果
3.遍历文件夹,逐个读取文件
4.追加到新文件里并保存
5.返回dirPath供删除行函数使用
# 功能:选择文件夹路径,合并文件夹下所有xls文件
import tkinter
from tkinter import filedialog
import os
import openpyxl
import pandas
def MergeFile():
# 创建窗口,初始化
root = tkinter.Tk()
root.withdraw()
# 弹出对话框选择文件夹
dirPath = filedialog.askdirectory()
# 创建新文件用于保存合并后的结果
wb = openpyxl.Workbook()
# 合并到新exce第一个sheet页(活动页)
ws = wb.active
# 遍历文件夹,读取文件,追加到新文件中
for file in os.listdir(dirPath):
dfs = pandas.read_excel(dirPath + "\\" + file, sheet_name=0)
# dataframe转化为列表
for df in dfs.values.tolist():
ws.append(df)
wb.save(dirPath + r"\汇总.xlsx")
return dirPath
删除行del_rows函数:
1.通过传递的dirPath找到刚刚合并后的表格,【汇总】表
2.找到【汇总】你需要操作的那个sheet页
3.遍历这个【汇总】表,删除空白行以及原表格中的表头那行
4.【汇总】表保存
# 功能:删除多余的行(空白行和一些不需要的行)
import openpyxl
def delRows(dirPath):
# 获取一个Sheet表,找到最大行
wb=openpyxl.load_workbook(dirPath+r"\汇总.xlsx")
sheet=wb["Sheet"]
rows=sheet.max_row
# 遍历所有行,找到不符合要求的,删除改行并保存
for row in range(rows,0,-1):
data1=sheet.cell(row,1)
if data1.value ==None or data1.value=="姓名":
sheet.delete_rows(row)
wb.save(dirPath+r"\汇总.xlsx")
这里我生成的文档为xlsx格式
一开始我是打算生成xls文档,毕竟公司用的都是xls文档。
但是当我写完合并文件的函数并且使用函数生成了xls文档后,我自己手动打开生成的xls文档,会提示【文件格式和扩展名不匹配。文件已损坏或不安全......】
需要自己手动选择【是】,才能打开文档。
一开始我没在意这个,但是当我使用python代码去打开文件并对单元格进行操作的时候,发现一直报错,后来改为xlsx格式才没有报错。