前言
为了更好的让openpyxl在工作中使用,将openpyxl的常用操作封装起来,这样不仅复用性高,而且阅读性好
from openpyxl import load_workbook from openpyxl.styles import PatternFill class ParseExcel: # 初始化表格 def __init__(self,excel_file_path): self.excel_file_path = excel_file_path self.wb = load_workbook(excel_file_path) self.ws = self.wb.active # 通过sheet名获取sheet表 def get_sheet_by_name(self,sheet_name): self.ws = self.wb.get_sheet_by_name(sheet_name) # self.ws = self.wb[sheet_name] # 方式二也可以 return self.ws # 通过索引获取sheet表 def get_sheet_by_index(self,index=1): sheet_name = self.wb.sheetnames[index-1] self.ws = self.wb[sheet_name] return self.ws # 获取所有的sheet名,列表格式 def get_all_sheet_names(self): return self.wb.sheetnames # 获取单元格数据 def get_cell_value(self,row_no,col_no,sheet_name=None): if sheet_name == None: return self.ws.cell(row=row_no, column=col_no).value return self.wb[sheet_name].cell(row=row_no, column=col_no).value # 获取单元格对象 def get_cell_obj(self,row_no,col_no,sheet_name=None): if sheet_name == None: return self.ws.cell(row=row_no, column=col_no) return self.wb[sheet_name].cell(row=row_no, column=col_no) # 获取最大行号 def get_max_row_num(self,sheet_name=None): if sheet_name == None: return self.ws.max_row return self.get_sheet_by_name(sheet_name).max_row # 获取最大列号 def get_max_col_num(self,sheet_name=None): if sheet_name == None: return self.ws.max_column return self.get_sheet_by_name(sheet_name).max_column # 获取最小行号,默认为1 def get_min_row_num(self,sheet_name=None): if sheet_name == None: return self.ws.min_row return self.get_sheet_by_name(sheet_name).min_row # 获取最小列号,默认为1 def get_min_col_num(self,sheet_name=None): if sheet_name == None: return self.ws.min_column return self.get_sheet_by_name(sheet_name).min_column # 获取某行的值,rows中的行以0开始 def get_some_row_value(self,row_no,sheet_name=None): row_value = [] if sheet_name is not None: self.get_sheet_by_name(sheet_name) for i in list(self.ws.rows)[row_no-1]: row_value.append(i.value) return row_value # 获取某列的值,columns中的行以0开始 def get_some_col_value(self,col_no,sheet_name=None): col_value = [] if sheet_name is not None: self.get_sheet_by_name(sheet_name) for i in list(self.ws.columns)[col_no-1]: col_value.append(i.value) return col_value #保存单元格 def save_excel(self): self.wb.save(self.excel_file_path) #单元格写入内容,并标记颜色 def write_cell_value(self,row_no,col_no,value,start_color=None,sheet_name=None): if sheet_name is not None: self.get_sheet_by_name(sheet_name) a1=self.ws.cell(row=row_no, column=col_no) #填充背景颜色 a1.fill = PatternFill(start_color=start_color, fill_type="solid") a1.value = value self.save_excel() return True def read_excel(self): data = [] # 定义一个列表接收每一组数据 title = {} # 定义一个字典 for i in range(1, self.ws.max_column + 1): title[i] = self.ws.cell(1, i).value # 遍历最大列依次获取每个单元格的value # print("打印第1行,所有列的数据:",title[i]) for i in range(2, self.ws.max_row + 1): # 从第2行开始遍历最大行 values = {} for j in range(1, self.ws.max_column + 1): # 从第2行第1列开始遍历单元格 # 获取每个单元格的数据后,通过title去匹配标题对应的value数据 # print("打印",title[j]) values[title[j]] = self.ws.cell(i, j).value # print("值:",values[title[j]]) data.append(values) # 把每一组数据添加至data列表内 # [{key1: vlaue1, key2: value2},{...},...] return data if __name__ == "__main__": pe = ParseExcel("./case/imooc.xlsx") print("------------") ws = pe.get_sheet_by_name('Sheet1') print("获取sheet表名:",ws) print("------------") print("获取sheet表名:",pe.get_sheet_by_index()) print("------------") print("获取所有sheet表名:",pe.get_all_sheet_names()) print("------------") print("获取指定单元格数据:",pe.get_cell_value(1,1)) print("------------") print("获取指定单元格对象:",pe.get_cell_obj(1,1,'Sheet1')) print("------------") print("获取指定单元格对象:",pe.get_cell_obj(1,1)) print("------------") print("获取最大行号:",pe.get_max_row_num('Sheet1')) print("------------") print("获取最大列号:",pe.get_max_col_num('Sheet1')) print("------------") print("获取最小行号:", pe.get_min_row_num('Sheet1')) print("------------") print("获取最小列号:", pe.get_min_col_num('Sheet1')) print("------------") print("获取某行的值:", pe.get_some_row_value(1,'Sheet1')) print("------------") print("获取某列的值:", pe.get_some_col_value(2, 'Sheet1')) print("------------") print(pe.write_cell_value(9, 2, "nihao", start_color="FF0000", sheet_name="Sheet1")) # 红色对应16进制值#FF0000 print("------------") print(pe.write_cell_value(9, 3, "钉钉", start_color="009900", sheet_name="Sheet1")) #绿色对应16进制值009900 print("------------") print(pe.read_excel())
返回结果:
标签:sheet,openpyxl,04,get,python,self,print,row,name From: https://www.cnblogs.com/xfbk/p/17026855.html