大家都知道,使用python中的Excel模块openpyxl可以读取Excel文件。
示例
假如有一个Excel文件如下:
使用openpyxl读取每个sheet页中的第2行第2列的内容。代码如下:
import openpyxl #导入模块
excelfile = "school.xlsx" # 要读取的 excel 文件
wb = openpyxl.load_workbook(excelfile) # 生成excel文件对应的工作簿对象
ws = wb['老师'] # 切换到 老师 的 sheet 也,返回对应的sheet也对象
rvalue = ws.cell(2, 2).value # 读取第2行第2列的数据
print(rvalue) # 打印获取的数据
ws = wb['课程']
rvalue = ws.cell(2, 2).value
print(rvalue)
ws = wb['学生']
rvalue = ws.cell(2, 2).value
print(rvalue)
输出:
许口罩
数学
小红
上面过程,虽然取到了想要的数据,但是代码看起来非常难以理解。代码量再大一点的话,不光会出现很多的魔法数字,隔一段时间返回来再看的时候,可能自己都忘记了代码的意思。
这就需要我们将这些难以记忆,不易读懂的代码封装到易读懂的方法中,这样就更有利于开发。并且类中的方法可以随着开发需要不断的完善。例如,当我们想切换sheet页时。可以将方法命名为:switch_to_sheet(“页名”);当我们读取数据时,更喜欢使用列名来读取,而并非列的序号,比如我们要读取学生页的姓名列,就可以直接这样 get_value(2, “姓名”), 即读取第2行,姓名列的内容。这样和实际的情况相符。
当然了可以根据自己的想法命名为有意义的,易读懂的方法名即可。
自定义封装
如下为封装后的类,这里只给出方法名,详细的类和测试代码见
附件资源
class ExcelOpt:
def __init__(self, file_name): # 初始化
def _build_header(self): # 构建表头索引
def _get_row_cell_value(self, row: str, col: str): # 获取某行某列的值
def switch_to_sheet(self, sheetname: str): # 切换 sheet 页
def get_value(self, row_num, col_name: str): # 获取某行某列的值
def max_row(self): # 获取当前 sheet 页最大行数
def max_column(self): # 获取当前 sheet 页最大列数
有了这个类,读取文件就如同下面代码:
from excelopt import ExcelOpt
excelfile = "school.xlsx"
my_excel = ExcelOpt(excelfile)
# 读取老师页
my_excel.switch_to_sheet("老师")
for i in range(2, my_excel.max_row() + 1):
print(my_excel.get_value(i, '姓名'))
# 读取课程页
my_excel.switch_to_sheet("课程")
for i in range(2, my_excel.max_row() + 1):
print(my_excel.get_value(i, '上课地点'))
输出:
许口罩
郑饭盒
姚外海
郭加佳
周时尼
科学楼202教室
勤学楼203教室
励志楼204教室
新明楼205教室
学上楼206教室
附件资源文件只写了几个读取的方法,当然还可以将写Excel的代码封装为自己想要的易读的方法。大家可以尽情发挥。