python操作excel表格及封装代码

1、使用openpyxl库,使用pip进行安装

pip install openpyxl

2、测试表格:Sheet1

python操作excel表格及封装代码_第1张图片

3、读取表格中某个单元格(Cell) 的value

from openpyxl import load_workbook

# excel的文件路径
excel_path = r"example1.xlsx"

# 加载一个excel,得到工作薄 Workbook
wb = load_workbook(excel_path)

# 选择一个表单 - 通过表单名 Sheet
sh = wb["Sheet1"]

# 在选择的表单当中,读取某个单元格的数据、修改/写入数据到某个单元格Cell
# excel中的行号和列号都是从1开始
cell_value = sh.cell(2, 3).value  # 读取2行3列的单元格的数值
print(cell_value)

result:

23
Process finished with exit code 0

4、获取当前sheet的总行号、总列号

# 得到当前sheet的总行号,总列号
row_nums = sh.max_row
col_nums = sh.max_column
print(f'表格有{row_nums}行,有{col_nums}列')

result:

表格有6行,有4列
Process finished with exit code 0

5、获取表头

5.1 方式一

# 读取表头(即第一行,作为keys),表头的Cell, row都是1
keys = []
for col_index in range(1, sh.max_column + 1):
    keys.append(sh.cell(1, col_index).value)
print(f'获取到的keys: {keys}')

result:

获取到的keys: ['姓名', '性别', '年龄', '喜好']
Process finished with exit code 0

5.2 方式二

# 获取表格的每一行数据
data = list(sh.values)
print(f'表格的所有data: {data}')
keys = data[0] # 获取所有的列名
print(f'获取到的keys: {keys}')

result:

获取到的keys: ['姓名', '性别', '年龄', '喜好']
表格的所有data: [('姓名', '性别', '年龄', '喜好'), ('张三', '男', 23, '打麻将'), ('李四', '男', 24, '打扑克'), ('王五', '男', 25, '斗地主'), ('麻子', '男', 26, '五子棋'), ('李姐', '女', 27, '飞行棋')]
Process finished with exit code 0

5.3 方式三: 列表推导式获取表头

# 列表推导式  列表名 = [值 表达式]
# 获取表头
keys = [sh.cell(1, col_index).value for col_index in range(1, sh.max_column + 1)]
print(f'获取到的keys: {keys}')

result:

获取到的keys: ['姓名', '性别', '年龄', '喜好']
Process finished with exit code 0

6、将表头和数据整理成字典

6.1 方式一

keys = [sh.cell(1, col_index).value for col_index in range(1, sh.max_column + 1)]

for row_index in range(2, sh.max_row + 1):
    values = []
    # 在每一行里面,从第1列开始,获取所有列的值
    for col_index in range(1, sh.max_column + 1):
        values.append(sh.cell(row_index, col_index).value)
        # print(values)
    # keys和values打包 - zip函数
    case = dict(zip(keys, values))
    print(f'{case}')

result:

{'姓名': '张三', '性别': '男', '年龄': 23, '喜好': '打麻将'}
{'姓名': '李四', '性别': '男', '年龄': 24, '喜好': '打扑克'}
{'姓名': '王五', '性别': '男', '年龄': 25, '喜好': '斗地主'}
{'姓名': '麻子', '性别': '男', '年龄': 26, '喜好': '五子棋'}
{'姓名': '李姐', '性别': '女', '年龄': 27, '喜好': '飞行棋'}
Process finished with exit code 0

6.2 方式二

keys = [sh.cell(1, col_index).value for col_index in range(1, sh.max_column + 1)]
all_data = []
for row in data[1:]:
    row_dict = dict(zip(keys, row))
    all_data.append(row_dict)
print(f'所有的数据:{all_data}')

result:

所有的数据:[{'姓名': '张三', '性别': '男', '年龄': 23, '喜好': '打麻将'}, {'姓名': '李四', '性别': '男', '年龄': 24, '喜好': '打扑克'}, {'姓名': '王五', '性别': '男', '年龄': 25, '喜好': '斗地主'}, {'姓名': '麻子', '性别': '男', '年龄': 26, '喜好': '五子棋'}, {'姓名': '李姐', '性别': '女', '年龄': 27, '喜好': '飞行棋'}]
Process finished with exit code 0

7、读取所有行

for row in sh.rows:
    # print(row)
    for item in row:
        print(item.value, end="  ")
    print()

result:

姓名  性别  年龄  喜好  
张三  男  23  打麻将  
李四  男  24  打扑克  
王五  男  25  斗地主  
麻子  男  26  五子棋  
李姐  女  27  飞行棋  

Process finished with exit code 0

8、给某个单元格写入值

# 给某个单元格写入值
sh.cell(7, 1).value = "get"  # 给第7行第1列的单元格写入“get”

# 一旦做了修改,就要保存
# filename如果不是打开的excel文件,那就是另存为
# 如果是打开的excel文件,保存到原文件中
# 保存的时候,要保证没有其它程序在使用当前文件。否则会报Permission Error
wb.save(excel_path)

9、封装excel操作

from openpyxl import load_workbook


class MyExcel:

    def __init__(self, excel_path, sheet_name):
        # 获取excel的路径
        self.excel_path = excel_path
        # 加载此excel,得到工作薄 Workbook
        self.wb = load_workbook(self.excel_path)
        # 获取要操作的sheet name
        self.sheet_name = sheet_name
        # 选择一个表单 - 通过表单名 Sheet
        self.sh = self.wb[self.sheet_name]

    # 读取所有表格数据
    def read_data(self):
        # 注意:接口的请求数据,读取出来是字符串。
        # 存储表单下读取到的所有数据 - 每一个成员都是一个字典
        all_data = []
        data = list(self.sh.values)
        keys = data[0]  # 获取所有的列名
        for row in data[1:]:
            row_dict = dict(zip(keys, row))
            all_data.append(row_dict)
        return all_data

    # 获取单元格数据
    def get_cell_data(self, row_num, col_num):
        cell_value = self.sh.cell(row_num, col_num).value
        return cell_value

    # 写入单元格数据
    def set_cell_data(self, row_num, col_num, cell_value):
        self.sh.cell(row_num, col_num).value = cell_value
        self.wb.save(self.excel_path)

    # 获取总行数
    def get_max_row(self):
        row_nums = self.sh.max_row
        return row_nums

    # 获取总列数
    def get_max_column(self):
        col_nums = self.sh.max_column
        return col_nums

    # 获取某一行的数据
    def get_row_value(self, raw_num):
        row_value_list = []
        for y in range(2, self.sh.max_column + 1):
            value = self.sh.cell(raw_num, y).value
            row_value_list.append(value)
        return row_value_list

    # 获取某一列的数据
    def get_column_value(self, col_num):
        col_value_list = []
        for x in range(2, self.sh.max_row + 1):
            value = self.sh.cell(x, col_num).value
            col_value_list.append(value)
        return col_value_list

if __name__ == '__main__':
    # excel的文件路径
    excel_path = r"example1.xlsx"
    me = MyExcel(excel_path, "Sheet1")
    cases = me.read_data()
    for case in cases:
        print(case)

result:

{'姓名': '张三', '性别': '男', '年龄': 23, '喜好': '打麻将'}
{'姓名': '李四', '性别': '男', '年龄': 24, '喜好': '打扑克'}
{'姓名': '王五', '性别': '男', '年龄': 25, '喜好': '斗地主'}
{'姓名': '麻子', '性别': '男', '年龄': 26, '喜好': '五子棋'}
{'姓名': '李姐', '性别': '女', '年龄': 27, '喜好': '飞行棋'}
{'姓名': 'get', '性别': None, '年龄': None, '喜好': None}

Process finished with exit code 0

你可能感兴趣的:(接口测试,python,excel,开发语言)