openpyxl

作者: SingleDiego | 来源:发表于2021-03-12 15:40 被阅读0次

    官方教程:https://openpyxl.readthedocs.io/en/stable/tutorial.html




    创建新文件(workbook)
    from openpyxl import Workbook
    
    wb = Workbook()
    ws = wb.active
    wb.save("sample.xlsx")
    

    以上代码会创建一个新的 xlsx 文件,并保存为 sample.xlsx 的文件名,并且会创建一个叫 Sheet 的工作表。

    使用 ws = wb.active,能获取到该工作表(默认是获取第一个工作表) ,保存为 ws 对象来操作。




    读取已存在的文件

    使用 load_workbook 方法读取已有的 xlsx 文件:

    from openpyxl import load_workbook
    
    wb = load_workbook('sample.xlsx')
    




    创建新工作表(worksheet)
    1. 使用 Workbook.create_sheet() 方法创建新工作表:
    # 在最后位置创建(默认)
    ws1 = wb.create_sheet("Mysheet") 
    
    # 在首位创建
    ws2 = wb.create_sheet("Mysheet", 0) 
    
    # 在倒数第二位置创建
    ws3 = wb.create_sheet("Mysheet", -1) 
    

    也可以先创建工作表再修改名称:

    ws = wb.create_sheet()
    ws.title = "New Title"
    
    1. 定义工作表标签的颜色:
    ws.sheet_properties.tabColor = "1072BA"
    
    1. 通过名称获取一个已存在的工作表:
    ws3 = wb["New Title"]
    
    1. 通过 Workbook.sheetnames 方法获取所有工作表的名称:
    >>> print(Workbook.sheetnames)
    ['Sheet', 'New Title']
    
    1. 复制工作表:
    source = wb.active
    target = wb.copy_worksheet(source)
    




    数据操作
    1. 获取单元格对象

    openpyxl 支持直接用 excel 表格的行列号获取单元格:

    >>> c = ws['A1']
    >>> print(c)
    
    <Cell 'demo1'.A1>
    

    要返回单元格的值:

    >>> c.value
    
    1. 修改单元格的值
    ws['A1'] = 'hello'
    

    一个完整的例子:

    from openpyxl import load_workbook
    
    wb = load_workbook('sample.xlsx')
    ws = wb['demo1']
    
    ws['A1'] = 'hello'
    
    wb.save("sample.xlsx")
    
    1. 使用 Worksheet.cell() 方法获取单元格对象
    # 获取单元格
    ws.cell(row=1, column=1)
    
    # 获取并修改单元格的值
    ws.cell(row=1, column=1, value=10)
    

    4.获取多个单元格

    cell_range = ws['A1': 'C2']
    

    以上代码获取 A1 到 C2 这一区域的所有单元格,类似的操作还有:

    >>> colC = ws['C']  # 获取C列所有
    
    >>> col_range = ws['C:D']  # 获取CD列所有
    
    >>> row10 = ws[10]  # 获取第10行所有
    
    >>> row_range = ws[5:10] # 获取5到10行所有
    

    使用 Worksheet.iter_rows() 方法也有同样的作用:

    # 获取 A1—A5
    for row in ws.iter_rows(min_row=1, max_row=5):
        for cell in row:
            print(cell)
    
    # 获取 A1—C5
    for row in ws.iter_rows(min_row=1, max_row=5, max_col=3):
        for cell in row:
            print(cell, cell.value)
    
    1. 遍历所有单元格

    按行遍历:

    for i in tuple(ws.rows):
        print(i)
    

    按列遍历:

    for i in tuple(ws.columns):
        print(i)
    
    1. 只获取值

    使用 Worksheet.values 方法可只返回工作表的单元格的值

    for i in ws.values:
        print(i)
    

    值会以元组的形式返回。Worksheet.iter_rows()Worksheet.iter_cols() 方法都能带上 values_only 参数,从而只返回值。

    for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True):
        print(row)
    

    相关文章

      网友评论

          本文标题:openpyxl

          本文链接:https://www.haomeiwen.com/subject/lvcwqltx.html