通过openpyxl自定义封装excel快捷方法,获取表格内容
通过封装openpyxl方法获取excel数据,减少业务层代码对三方库和表格的调用,提高运行速度,同时分离出业务层与基础模块,方便后期维护
除示例方法外,封装类中可添加其他其他方法,如获取单元格内容,获取单个、多个sheet的值并返回数组或迭代器,单元格写入新内容等。
from openpyxl import load_workbook import openpyxl as xl # 可注释,此处导入仅用来声明self.wb和self.sheet的类型,方便查询对应子方法 class ExcelHandler(): """ 处理excel表格 """ def __init__(self, file: str = None, sheet: str = None): self.wb: xl.workbook.Workbook = load_workbook(file) # 加载表格 self.sheet: xl.workbook.Workbook.Worksheet = self.wb[sheet] # 获取指定sheet对象 def get_col_value(self, col:str=None): """ 获取列数据 :param col: 列号,从"A"开始,未传入时返回所有列的数据(最大取到第15列的数据) :return: """ if col: # 如果col传入值,则取对应列数据,否则返回所有列数据 data = [cell.value for cell in self.sheet[col]] # self.sheet[row,col]同时传入row和col时返回单元格内容,传入单一值时,以元组返回单行或单列数据 else: data = [] data_iter = self.sheet.iter_rows(min_row=1, max_row=self.sheet.max_row, min_col=1, max_col=15) # iter_rows()返回一个迭代器,min/max参数限制查找范围 for col in data_iter: # 每次迭代一行数据 data.append([cell.value for cell in col]) # 存储所有行的数据,数据量大的情况下,可直接返回迭代器data_iter,在后续逻辑迭代获取值 return data def get_row_value(self, row: int=None): """ 获取列数据 :param row: 行号,从 1 开始,未传入时返回所有行的数据(每行最大取到第15列的数据) :return: """ if row: data = [cell.value for cell in self.sheet[row]] else: data = [] data_iter = self.sheet.iter_rows(min_row=1, max_row=self.sheet.max_row, min_col=1, max_col=15) for row in data_iter: data.append([cell.value for cell in row]) return data @property def max_row(self): # 数据行数 return self.sheet.max_row @property def max_col(self): # 数据列数 return self.sheet.max_col if __name__ == '__main__': handler = ExcelHandler(r"C:\Users\", "sheet1") data = handler.get_col_value("A") # 取A列的数据 data = handler.get_row_value(1) # 取第一行的数据 print(data)

浙公网安备 33010602011771号