前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 库学习之:openpyxl

python 库学习之:openpyxl

作者头像
Mokwing
发布2020-09-08 10:32:43
9780
发布2020-09-08 10:32:43
举报
文章被收录于专栏:MokwingMokwing

一、前言

openpyxl介绍:

读取/写入 Excel2010 xlsx / xlsm / xltx / xltm 文件的python库。

官方解释地址:http://openpyxl.readthedocs.io/en/stable/

二、安装openpyxl模块

openpyxl是开源项目,使用pip3就可以进行安装openpyxl模块

pip3 install openpyxl

我使用的是pycharm,在pycharm的file--sitting里面可以直接安装,如图:

三、简单应用:

写数据:

代码语言:javascript
复制
def write_data_to_excel():
    file = openpyxl.load_workbook("../data/regist_test_data.xlsx")
    file.worksheets
    sheet = file.active
    for j in range(1, 11):
        time.sleep(1)
        # 邮箱
        email = make_email()        # 是自己写的生成email的方法
        sheet["A%d" % (j + 1)].value = email
        # 用户名
        username = make_name()      # 是自己写的生成username的方法
        sheet["B%d" % (j + 1)].value = username
        # 密码
        passwd = random_password()  # 是自己写的生成password的方法

        sheet["C%d" % (j + 1)].value = passwd

    file.save("../data/regist_test_data5.xlsx")


write_data_to_excel()

读数据:

代码语言:javascript
复制
def test_all(self):
    log.info("----我们开始要注册了哦----")
    time.sleep(2)
    ipinfo = get_ip_info()

    print("****** begin ******")
    book = openpyxl.load_workbook("../data/regist_test_data4.xlsx")  # 默认可读写,若有需要可以指定write_only和read_only为True
    b = book.active
    datadict = {}  # 创建一个字典变量
    maxC = b.max_column  # 获取最大列
    maxR = b.max_row  # 获取最大行

    # range默认从0开始,到后面参数的-1结束,而openpyxl都是从第一行第一列开始的,所以参数为1,maxC+1;意思就是遍历第一列到最后一列,
    for i in range(1, maxC + 1):
        # 将第一行中的所有列即2标题作为键放到字典datadict里面
        datadict.setdefault(b.cell(1, i).value)

    # 除去第一行标题,从第二行遍历到最后一行
    for i in range(2, maxR + 1):
        # 从第一列遍历到最后一列
        for j in range(1, maxC + 1):
            # 把第二行的内容作为键对应的值放入字典datadict里面
            datadict[b.cell(1, j).value] = b.cell(i, j).value
        try:
            email = datadict["email"]
            print("获得的邮箱:", email)
            username = datadict["username"]
            print("获得的用户名:", username)
            password = datadict["password"]
            print("获得的密码:", password)

            time.sleep(2)
            self.regist_driver.regist_all_function(email, username, password)
       
        except:
            # 当程序出现错误时,将错误结果写入表格中
            b.cell(i, maxC, 'error')
            # 最后记得关闭
    book.save("../data/mylogintest.xlsx")

    print("****** end ******")

四、下面展示一些基本操作:

代码语言:javascript
复制
import openpyxl

# 一、加载excel文件
file = openpyxl.load_workbook("test.xlsx")
print(file)
print("==========================================================")

# 二、获取sheet页
# 第1种 打开特定的sheet页,这种方法不建议使用,已经被弃用了,建议使用下面第3种的这个方法
# ab = file.get_sheet_by_name("sheet1")     # DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname])

# 第2种 通过索引加载sheet index从0开始
ab = file.worksheets[0]

# 第3种 通过sheet页名称获取
# ab = file["sheet1"]

# 第4种 获取当前的sheet页
# ab = file.active
print("==========================================================")

# 三、创建新的sheet页 ,创建成功,记得最后一定执行保存动作。创建的时候记得关掉excel文件
# 1、插入在工作簿的指定位置位置 index从0开始
ws = file.create_sheet(index=1)

# 2、创建的时候修改sheet页的名称
ws1 = file.create_sheet(title="hello", index=2)

# 3、默认插在工作簿末尾
ws2 = file.create_sheet()
print("==========================================================")

# 四、修改sheet页名称
ws.title = "my life"
ws2.title = "hello world"
print("==========================================================")

# 五、读取数据,单元格操作
DATA = []
'''
iter_rows()
按行生成工作表中的单元格。 指定迭代范围
使用行和列的索引。
如果未指定索引,则范围从A1开始。
如果工作表中没有单元格,则返回空元组
'''
# 1、循环读取excel中所有的数据
for row in ab.iter_rows(
                        # range_string='A1:B2',         # range_string:指定读取的范围(string类型),在这个方法里面不建议使用
                        min_col=1,                      # min_col:最小列索引(1-基础索引)int(类型)
                        min_row=1,                      # min_row:最小行索引(1-基础索引)int(类型)
                        max_row=ab.max_row,             # max_row:最大行
                        max_col=ab.max_column,           # max_col:最大列
                        row_offset=1,                   # 行偏移量,默认表示从0开始读取数据,从1开始,就会略过第1行,下面多读取一行
                        column_offset=0                 # 同上
                        ):
    # print("我们得到的迭代数据:", row)                  # 这里我们得到的值是这个excel有值的地址,以每行的形式读取,返回的是tuple

    ROW = []
    for cell in row:
        ROW.append(cell.value)
    print("表中读取到的数据:", ROW)
    # DATA.append(ROW)
# print(DATA)

print("********************")
# 2、读取exce中单个数据
only_data = ab["A2"].value
print(only_data)
print("********************")

# 3、获取多个单元格的值
range_data = ab["A1:D5"][0]
for i in range_data:
    print(i.value)
print("********************")

# 4、给单元格赋值
ab["E1"] = "test"

# file.save("test.xlsx")

参考了简书,博客地址:https://www.jianshu.com/p/b1983be87f56

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-07-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档