拥有自己的Python-Excel模块

大家都知道,使用python中的Excel模块openpyxl可以读取Excel文件。

示例

假如有一个Excel文件如下:
School.xlsx
使用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的代码封装为自己想要的易读的方法。大家可以尽情发挥。

猜你喜欢

转载自blog.csdn.net/weixin_44131612/article/details/131062794