Python中Excel的基本操作


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无法打开)。

  1. 安装

    pip install xlrd==1.2.0
    pip install xlwt
  2. 准备好要读取的excel文件内容如下:

  3. 代码实现如下:

    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:'张三'
    张三
  4. 新建一个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

openpyxl模块是一个可以读写Excel2010文档(xlsx格式)的Python库。openpyxl功能强大,几乎可以支持excel的绝大数功能(单元格格式/图片/表格/公式/筛选/批注/文件保护等)

  1. 安装

    pip install openpyxl
  2. 打开一个已有文件并修改内容,这里使用上文中的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')

    执行结果:

  3. 新建一个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')

    执行结果:

  4. 打开一个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

文章作者: 老百
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 老百 !
 上一篇
Python中对CSV的操作 Python中对CSV的操作
Python附带一个CSV模块,该模块允许在不安装第三方库的情况下读取和写入CSV文件。默认情况下,它旨在处理Microsoft Excel生成的CSV文件格式,但它可以配置为读取和写入任何类型的 CSV 文件。
2022-11-08
下一篇 
Python中YAML的基本操作 Python中YAML的基本操作
YAML(YAML Ain’t Markup Language,即YAML不是一种标记语言)是一种高可读的数据序列化的语言,可以被大多数编程语言支持使用,主要用于数据序列化、配置文件等。
2022-11-06
  目录