§1 教程

作者: 第六九书 | 来源:发表于2020-07-26 11:08 被阅读0次

    1 教程

    1.1 创建工作薄

    1.1.1 创建一个工作薄

    使用openpyxl时不需要在计算机文件系统中提前创建excel工作簿文件,只需要导入Workbook类即可。

    from openpyxl import Workbook
    
    wb = Workbook()
    wb.save('text.xlsx')
    
    • 程序运行时可以新建一个text.xlsx文件;
    • 也可以打开并修改一个现有的“text. xlsx”文件。前提是文件没有被占用;
    • 除非特别指定路径,否则,文件是在程序文件的同一路径之下。

    1.1.2 添加工作表

    1.1.2.1 active方法

    一个工作簿(workbook)至少要有一个工作表(worksheet),可以使用Workbook.active属性创建一个默认工作表。

    ws = wb.active
    

    使用此方法创建的工作表位置需要默认是0。
    除非创建时修改工作表位置,否则此方法创建的的工作表默认都是第一个工作表,即序号为0的工作表。

    image.png

    1.1.2.2 create_sheet()方法

    另外,还可以使用Workbook.create_sheet()方法创建工作表

    ws1 = wb.create_sheet("Mysheet0") # 从后方插入一个工作表(默认)
    # or
    ws2 = wb.create_sheet("Mysheet1", 0) # 从最前面插入一个工作表。
    # or
    ws3 = wb.create_sheet("Mysheet2", -1) # 在倒数第二的位置插入一个工作表。
    
    image.png

    1.1.3 工作表命名

    工作表创建时名称会自动命名,命名的序列是 (Sheet, Sheet1, Sheet2, …)。我们也可以随时修改工作表名称,工作表名称修改时,使用Worksheet.title的属性:

    ws1.title = "插入工作表1"
    ws2.title = "插入工作表2"  
    ws3.title = "插入工作表3" 
    

    1.1.4 更改工作表标签的背景色

    工作表标签背景色默认是白色,我们可以使用Worksheet.sheet_properties.tabColor属性改变背景颜色,此时的背景色代码应为“RRGGBB”格式。

    ws1.sheet_properties.tabColor = "1072BA"
    
    image.png

    1.1.5 获取工作表

    • 给工作表命名后,可以将名称作为工作簿关键字的方式获取。
    print(wb["插入工作表1"]) # ws4实际上就是ws1
    
    • 使用属性Workbook.sheetnames获取工作簿所有的工作表名称。
    print(wb.sheetnames)
    
    image.png
    • 也可以循环浏览工作表
    for sheet in wb: 
        print(sheet)
        print(sheet.title)
    
    image.png

    1.1.6 复制工作表

    在同一工作薄里面通过复制创建工作表。方法:Workbook.copy_worksheet()

    source = wb.active
    target = wb.copy_worksheet(source)
    
    image.png

    注意:

    1. 只有表格中的数据、格式、超链接、注释以及一部分工作表属性(包括尺寸、格式和特性等)会被复制,其他的诸如图片、图表等不会被复制。
    2. 不能跨工作薄复制。
    3. 只读模式的工作表不能复制。

    1.2 数据操作

    1.2.1 单个单元格

    现在我们知道如何得到一个工作表,我们可以开始修改单元格内容了。单元格可以作为工作表的键直接访问:

    c = ws['A4']
    

    这将返回A4处的单元格,或者创建一个不存在的单元格。也可直接赋值:ws['A4'] = 6
    也可以通过Worksheet.cell()方法进行赋值。该方法可以使用行和列表示法访问单元格:
    d = ws.cell(row=1,column=4,value=6) # 行列值的顺序

    注意:在内存中创建工作表时,工作表对象一般是不包含单元格。单元格是在第一次访问时才创建的。

    正是由于这个特性,需要创建单元格时一般是使用滚动单元格方式创建,而不是直接访问并给它们赋值。例如下面这个方法就是创建了一个100*100的空单元格。

    for x in range(1,101):
        for y in range(1,101):
            ws.cell(row=x, column=y) 
    

    1.2.2 多单元格操作

    • 可以使用切片功能访问指定范围的单元格.cell_range = ws['A1':'C2']
    • 行或列的范围可以简单的获得
    colC = ws['C'] # 获取C列
    col_range = ws['C:D'] # 获取c、d两列
    row10 = ws[10] # 获取的10行
    row_range = ws[5:10] # 获取第5-10行
    
    • 使用方法Worksheet.iter_rows()获取行
    for row in ws.iter_rows(min_row=1,max_row=2,max_col=3):
        for cellin row:
             print(cell)
    
    图片.png
    • 使用方法Worksheet.iter_cols()获取列。须注意的是,由于性能原因,该方法在只读模式下不可用。
    for row in ws.iter_cols(min_row=1,max_row=2,max_col=3):
        for cellin row:
             print(cell)
    
    图片.png
    • 如果需要整篇文档的行,可以使用 Worksheet.rows属性
    ws = wb.active
    ws['C9'] = 'hello world'
    a = tuple(ws.rows)
    print(a)
    
    图片.png
    • 如果需要整篇文档的列,可以使用 Worksheet.columns属性。但需注意,只读模式下不适用。
    ws = wb.active
    ws['C9'] = 'hello world'
    b = tuple(ws.columns)
    print(a)
    
    图片.png

    1.2.3 值的操作

    如果是只针对工作表中的值进行操作,可以使用属性Worksheet.values。此时会按行迭代工作表中的所有值。
    If you just want the values from a worksheet you can use the Worksheet.values property. This iterates over all the rows in a worksheet but returns just the cell values:

    for row in ws.values: # 读取行的值
        for value in row: # 读取每个单元格的值
            print(value) # 打印出每个单元格的值
    
    图片.png

    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)
    
    效果
    for col in ws.iter_cols(min_row=1,max_row=5,max_col=3,values_only=True):
        print(col) # 打印包含列数据的列表
    
    图片.png

    1.3 数据保存

    如果我们知道了某一个单元格,我们就可以给这个单元格分配一个数据。

    # 变量赋值
    c = ws['A2']
    d = ws.cell(2,2)
    
    # 单元格数据赋值
    c.value = 20200726
    d.value = '赵宝玉'
    
    # 显示单元格数据
    print(c.value)
    print(d.value)
    

    1.3.1 保存数据至文件

    保存数据是简单直接也是最安全的方法是使用Workbook对象的workbook.save()方法。但是

    警告
    需要注意的是,如果文件已存在,本操作将会直接覆盖文件,而不会提前警告。

    注意
    文件扩展名不强制为xlsxxlsm,但如果不使用正式扩展名,则直接用另一个应用程序打开它可能会遇到一些问题。
    由于OOXML文件基本上是ZIP文件,所以您也可以用您最喜欢的ZIP文档管理器打开它。

    from openpyxl import Workbook
    
    wb = Workbook() # 给工作薄赋值,注意大小写
    wb.save('student.xlsx')
    

    或者

    import openpyxl
    
    wb = openpyxl.Workbook()
    wb.save('student.xlsx')
    

    1.3.2 保存为流文件

    如果你相保存为流文件时,在使用诸如Pyramid, Flask 或是 Django 等的网络应用时,可能 会需要保存为流文件,此时只需提供一个简单的方法NamedTemporaryFile()即可。

    from tempfile import NamedTemporaryFile
    from openpyxl import Workbook
    
    wb = Workbook()
    
    with NamedTemporaryFile() as tmp:
        wb.save(tmp.name)
        tmp.seek(0)
        stream = tmp.read()
    

    还可以使用“template”属性将工作薄保存为模板文件。template=True

    wb = load_workbook('document.xlsx')
    wb.template = True
    wb.save('document_template.xltx')
    

    或者将属性设置为False,用来保存为文档。

    wb = load_workbook('document_template.xltx')
    wb.template = False
    wb.save('document.xlsx', as_template=False)
    

    警示
    您应该管理数据属性和文档扩展名,以便在文档模板中保存文档,反之亦然,否则文档无法正常打开。

    注意:以下操作会失败:

    wb = load_workbook('document.xlsx')
    # 扩展名应为“ *.xlsx”
    wb.save('new_document.xlsm')
    # MS Excel无法打开文档
    
    # 或者
    
    # 需要特别指出属性“ keep_vba=True”
    wb = load_workbook('document.xlsm')
    wb.save('new_document.xlsm')
    # MS Excel无法打开文档
    
    # 或者
    
    wb = load_workbook('document.xltm', keep_vba=True)
    # 如果需要模板文件,需要特别指明扩展名为“*.xltm”
    wb.save('new_document.xlsm')
    # MS Excel无法打开文档
    

    1.4 加载文件

    与写入文件一样,我们可以使用openpyxl.load_workbook()方法来打开已存在的工作薄文件。

    from openpyxl import load_workbook
    
    wb2 = load_workbook(result.xlsx')
    print wb2.sheetnames
    

    输出结果是:['调查结果', '评价结果']

    ===

    相关文章

      网友评论

        本文标题:§1 教程

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