本文主要是介绍python处理excel,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#安装openpyxl pip install openpyxl
import openpyxl
class ExcelAuto:
"""自动化处理excel程序,需提前安装openpyxl"""
def __init__(self):
"""初始化信息"""
# 读取文件的路径
self.path_name = ""
# 存储excel中的信息
self.student_list = []
# 用于设置列名
self.letter="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
# 参数 :sheet_index 默认第一行是放的表头
# 参数 :sheet_row 默认数据是从第二开始
self.sheet_index = 1
self.sheet_row = 2
def _get_workbook_allsheets(self):
"""获取文件对象和所有工作表名称"""
self.wb = openpyxl.load_workbook(self.path_name)
self.allsheets = self.wb.get_sheet_names()
def get_all_data(self,path_name,index=1,row=2):
"""获取当前excel中的所有数据
参数1: 文件路径
参数2: index 默认第一行是放的表头
参数3: row 默认数据是从第二开始
返回值:以[{}, {}, {}]格式返回数据
"""
self.sheet_index = index
self.sheet_row = row
self.path_name = path_name
self._get_workbook_allsheets()
for i in self.allsheets:
self.student_list+=self._get_data(i)
return self.student_list
def get_specified_sheet_data(self,path_name,sheet_name="",index=1,row=2):
"""获取excel中指定的所有sheet中的数据
参数1: 文件路径
参数2: 指定sheet的名字,默认是第一个表
参数3: index 默认第一行是放的标题
参数4: row 默认数据是从第二开始
返回值:以[{}, {}, {}]格式返回数据
"""
self.sheet_index = index
self.sheet_row = row
self.path_name = path_name
self._get_workbook_allsheets()
if sheet_name == "":
self.student_list = self._get_data(self.allsheets[0])
return self.student_list
else:
if sheet_name not in self.allsheets:
print("输入的表名有误")
return False
else:
self.student_list = self._get_data(sheet_name)
return self.student_list
def _get_data(self,sheetname):
"""获取当前sheet中的所有数据
参数1:sheetname 表名
"""
index = self.sheet_index
row = self.sheet_row
ws = self.wb.get_sheet_by_name(sheetname)
student_list=[]
for i in range(row,ws.max_row+1):
if ws.max_column>=26:
pass
else:
dict_tmp = {}
for j in range(ws.max_column):
key_name=ws[self.letter[j]+str(index)].value
item_name=self.letter[j]+str(i)
dict_tmp[key_name] = ws[item_name].value
student_list.append(dict_tmp)
return student_list
def save_to_excel(self,inputData,outPutFile,sheet_name="Sheet1"):
"""把字典写入excel中
参数1: inputData格式是 [{}, {}, {}]
参数2: inputData是输出文件名字
参数3: sheet名,默认Sheet1
"""
wb = openpyxl.Workbook()
sheet = wb.active
sheet.title =sheet_name
i = 0
for name in inputData[0].keys():
sheet[self.letter[i]+str(1)].value = name
i=i+1
j=1
for item in inputData:
k = 0
for key in item:
sheet[self.letter[k]+str(j+1)].value = item[key]
k = k+1
j = j+1
wb.save(outPutFile)
print(f"{outPutFile}:数据填写完毕!")
def split_excel(self,path_name,specified_header):
"""按指定表头拆分excel
参数1: path_name 原excel文件路径
参数2: 指定表头
"""
self.get_all_data(path_name)
list_key = []
dict_tmp = {}
for i in self.student_list:
if i[specified_header] not in list_key:
list_key.append(i[specified_header])
dict_tmp[i[specified_header]]=[]
dict_tmp[i[specified_header]].append(i)
for key,value in dict_tmp.items():
key = key +".xlsx"
self.save_to_excel(value,key)
if __name__ == "__main__":
fn_a = r"a.xlsx"
ExcelAuto().split_excel(fn_a,"班级")
这篇关于python处理excel的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!