python接口自动化系列 - openpyxl库封装04
前言
为了更好的让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())
返回结果:


本文来自博客园,作者:橘子偏爱橙子,转载请注明原文链接:https://www.cnblogs.com/xfbk/p/17026855.html

浙公网安备 33010602011771号