python 库学习之:openpyxl
一、openpyxl介绍:
读取/写入 Excel2010 xlsx / xlsm / xltx / xltm 文件的python库。
官方解释地址:http://openpyxl.readthedocs.io/en/stable/
二、安装openpyxl模块
openpyxl是开源项目,使用pip3就可以进行安装openpyxl模块
pip3 install openpyxl
我使用的是pycharm,在pycharm的file--sitting里面可以直接安装,如图:
三、简单应用:
写数据:
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()
读数据:
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 ******")
四、下面展示一些基本操作:
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