《基于Python的全栈自动化测试》之 操作Excel,读取数据

想要操作Excel,首先要导入 openpyxl 模块:

openpyxl内包含新建,打开,读写、保存,等操作的方法,但是它只支持 xlsx 类型的文件:

  1. openpyxl.Workbook 是openpyxl的类文件,它用来新建;
  2. openpyxl.load_workbook 是openpyxl 的方法函数,类似open()函数,用来读写文件;

基本操作:

一、新建Excel

import openpyxl
"""新建、保存 Excel"""

"""先将 openpyxl 类实例化,创建个对象;"""
wb = openpyxl.Workbook()
"""用对象调用 save() 方法,将当前工作簿保存在指定的“文件名”下,如没有该文件则会新建一个工作薄;"""
wb.save('excel_01.xlsx')  

二、操作Excel

import openpyxl

"""1. 打开Excel文件,使用 load_workbook 函数打开 Excel,并将文件对象赋值给 workbook,和open()非常相似"""
workbook = openpyxl.load_workbook('excel_01.xlsx')

"""2.定位表单,选择我们想要操作的工作薄"""
# 方法一,已经过时,使用时会报 Warning
sheet_1 = workbook.get_sheet_by_name('Sheet')
# 方法二,目前用的
sheet_2 = workbook['Sheet']

"""3.定位单元格,单元格是按行列来定位,先行后列,都是用数值来表示"""
sheet_2.cell(row=1,column=2)  # 定位到第1行,第2列

"""4. 单元格-读取"""
result = sheet_2.cell(row=1,column=2).value
print(result)

"""5. 单元格-写入"""
sheet_2.cell(row=1,column=2).value='写入单元格'
"""写入后必须保存,写入时必须关闭Excel,否则会报错:没有权限;"""
workbook.save('excel_01.xlsx') 

批量读取:

    单个操作读写单元格效率很low,所以我们可以采用 for 循环来批量读写单元格:

  1. 获取最大行数:sheet.max_row   
  2. 获取最大列表 :sheet.max_row,注意这里的sheet不是语法的,而是你定位到的表单!
  3. 使用 for 循环:
import openpyxl
book_1 = openpyxl.load_workbook('excel_01.xlsx')
sheet = book_1['Sheet']

"""获取最大行数  sheet.max_row  """
"""获取最大列数  sheet.max_column  """

"""用最大行数和列数进行 for 循环"""
for i in range(1, sheet.max_row+1):  # 循环 行
    for j in range(1, sheet.max_column+1):  # 循环 列
        result = sheet.cell(row=i, column=j).value
        print(f'读取到的内容是:{result},它的数据类型是:{type(result)}')  #  打印结果和类型

 来看下我们要操作的 excel_01.xlsx 文件的内容:

再看下执行结果:

从结果上看,python会遍历最大行数和列数之内的所有单元格,如果没有内容的话就会返回 None 。

Excel的数据类型:

    在看下上面的执行结果的红框部分,我们发现不管是 列表、元组、还是字典,它的数据类型都是 str。这是因为常规下Excel只认识 str、int、float 三种数据类型,所以我们用python读取出来也都是这三种。

    但是我们可以用 eval() 函数来转换成原来的格式:

import openpyxl
book_1 = openpyxl.load_workbook('excel_01.xlsx')
sheet = book_1['Sheet']

for i in range(1, sheet.max_row+1):
    for j in range(1, sheet.max_column+1):
        result = sheet.cell(row=i, column=j).value
        """判断为空的不打印"""
        if result != None:
            if i == 1 and j in [3, 4, 5,]:
                """用 eval() 函数 将这几个单元格的数据格式转换原来的的类型"""
                result = eval(result)
                print(f'读取到的内容是:{result},它的数据类型是:{type(result)}')
            else:
                print(f'读取到的内容是:{result},它的数据类型是:{type(result)}')

执行结果:

数据类型已经转换为相对应的类型,注意:如果本身就是str的话,在使用 eval() 函数会报错!

END!!!

 

发布了44 篇原创文章 · 获赞 23 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/waitan2018/article/details/85483874