python操作excel需要安装第三方库,操作excel的库有很多,这里介绍xlrd
& xlrw
组合和openpyxl
这三个库。
excel的术语名词:
- 一个excel文件(xls或xlsx),工作簿;
- sheet页,工作表;
- rows,行;
- cols,列;
- (行,列)单元格;
xlrd & xlrw
这里说明一下,xlrd
有个缺陷,就是最新版本不支持xlsx文件格式,需要安装1.2.0的旧版本。xlwt
仅支持xls文件格式,不支持xlsx文件格式(可以生成xlsx文件,wps可以正确打开,但office无法打开)。
安装
pip install xlrd==1.2.0 pip install xlwt
准备好要读取的excel文件内容如下:
代码实现如下:
import xlrd # 创建workbook对象 book = xlrd.open_workbook("case03.xlsx") # 获取sheet对象(可以通过索引或sheet的名称获取) sheet = book.sheet_by_index(0) # sheet = book.sheet_by_name('login_testcase') # 获取行数和列数 rows = sheet.nrows # 总行数 cols = sheet.ncols # 总列数 # 读取每行的内容 print("_________读取每行的内容___________") # 在执行读取测试用例时,因为第一行是表头,无需读取,range(1,sheet.nrows)即可 for r in range(rows): r_values = sheet.row_values(r) print(r_values) # 读取每列的内容 print("_________读取每列的内容___________") for c in range(cols): c_values = sheet.col_values(c) print(c_values) # 读取某个单元格中的内容 print("_________读取某个单元格的内容___________") print(sheet.cell(1, 2)) print(sheet.cell(1, 2).value)
执行结果:
_________读取每行的内容___________ ['username', 'password', 'result'] ['zhangsan', 'zs123456', '张三'] ['lisi', 'ls123456', '李四'] ['wangwu', 'ww123456', '王五'] _________读取每列的内容___________ ['username', 'zhangsan', 'lisi', 'wangwu'] ['password', 'zs123456', 'ls123456', 'ww123456'] ['result', '张三', '李四', '王五'] _________读取某个单元格的内容___________ text:'张三' 张三
新建一个xls文件,写入内容
import xlwt # 创建workbook对象 book = xlwt.Workbook() # 新建一个sheet页 sheet1 = book.add_sheet('testcase') # 在单元格中写入数据 sheet1.write(0, 0, 'username') sheet1.write(0, 1, 'password') sheet1.write(0, 2, 'result') # 写入一行数据 row = ['zhangsan', 'zs123456', '张三'] for i in range(len(row)): sheet1.write(1, i, row[i]) # 写入多行行数据 row = [['lisi', 'ls123456', '李四'], ['wangwu', 'ww123456', '王五']] for i, item in enumerate(row): for j, value in enumerate(item): sheet1.write(i + 2, j, value) # 保存 book.save('case05.xls')
执行代码,会在当前目录下生成一个case05.xls
openpyxl
openpyx
l模块是一个可以读写Excel2010文档(xlsx格式)的Python库。openpyxl
功能强大,几乎可以支持excel的绝大数功能(单元格格式/图片/表格/公式/筛选/批注/文件保护等)
安装
pip install openpyxl
打开一个已有文件并修改内容,这里使用上文中的case03.xlsx
import openpyxl # 创建workbook对象,加载已存在的文件 book = openpyxl.load_workbook('case03.xlsx') # 获取sheet对象 # sheet1 = book.get_sheet_by_name('login_testcase') sheet1 = book['login_testcase'] # 写入数据 # 在某个单元格中写入数据。 单元格的行和列的索引都是从1开始的 sheet1.cell(5, 1).value = "chenliu" sheet1.cell(5, 2).value = "cl123456" # sheet1.cell(5, 3).value = "陈六" sheet1['c5'] = "陈六" # 写入一行数据 new_row = ['dongqi', 'dq123456', '董七'] sheet1.append(new_row) book.save('case03.xlsx')
执行结果:
新建一个xlsx文件并写入内容
import openpyxl # 创建workbook对象,创建新文件 book = openpyxl.Workbook() # 创建新的工作表 sheet1 = book.create_sheet('testcase', 0) # 在单元格中写入数据 sheet1.cell(1, 1).value = "username" sheet1.cell(1, 2).value = "password" sheet1.cell(1, 3).value = "result" sheet1['a2'] = "zhangsan" sheet1['b2'] = "zs123456" sheet1['c2'] = "张三" # 写入一行数据 new_row = ['lisi', 'ls123456', '李四'] sheet1.append(new_row) # 写入多行数据 new_rows = [['wangwu', 'ww123456', '王五'], ['chenliu', 'cl123456', '陈六']] for i in new_rows: sheet1.append(i) # 保存 book.save('case07.xlsx')
执行结果:
打开一个xlsx文件并读取内容
import openpyxl # 创建workbook对象,加载已存在的文件 book = openpyxl.load_workbook('case03.xlsx') # 获取sheet对象 sheet1 = book['login_testcase'] # sheet1 = book.active # 获取当前正激活使用的工作表 # 获取全部的工作表名 all_sheet_names = book.sheetnames # 获取工作表的名字 sheet1_name = sheet1.title # 获取全部的数据行数 rows = sheet1.max_row # 获取全部的数据列数 cols = sheet1.max_column print(''' 所有工作表名:{} sheet1表名:{} sheet1数据的总行数:{} sheet1数据的总列数:{} '''.format(all_sheet_names, sheet1_name, rows, cols)) # 读取数据 print("_________读取某个单元格的内容___________") # 按单元格读取 a2 = sheet1['A1'].value b2 = sheet1.cell(2, 2).value print("a2的值为:", a2) print("b2的值为:", b2) # 按行读取 print("_________读取每行的内容___________") # 只读取某一行 for row in sheet1.iter_rows(min_row=3, max_row=3): for cell in row: print(cell.value, end='\t') print() # 读取多行 for row in sheet1.iter_rows(min_row=2, max_row=4): for cell in row: print(cell.value, end='\t') print() # 按列读取 print("_________读取每列的内容___________") # 只读取一列 for col in sheet1.iter_rows(min_col=3, max_col=3): for cell in col: print(cell.value, end='\t') print() # 读取多列 for col in sheet1.iter_rows(min_col=1, max_col=3): for cell in col: print(cell.value, end='\t') print()
执行结果:
所有工作表名:['login_testcase'] sheet1表名:login_testcase sheet1数据的总行数:6 sheet1数据的总列数:3 _________读取某个单元格的内容___________ a2的值为: username b2的值为: zs123456 _________读取每行的内容___________ lisi ls123456 李四 zhangsan zs123456 张三 lisi ls123456 李四 wangwu ww123456 王五 _________读取每列的内容___________ result 张三 李四 王五 陈六 董七 username password result zhangsan zs123456 张三 lisi ls123456 李四 wangwu ww123456 王五 chenliu cl123456 陈六 dongqi dq123456 董七 Process finished with exit code 0