openpyxl

作者: f550c7326662 | 来源:发表于2020-02-29 14:21 被阅读0次

    openpyxl教程

    第一章 基础教程

    1.在内存中熟练操作工作簿

    创建一个工作表

    这里不需要在文件夹中新建一 个openpyxl文件,只需要导入Workbook类就行了。

    from openpyxl import Workbook
    wb = Workbook()
    

    一个工作簿通常都会包涵一个工作表,你可以通过使用openpyxl.workbook.Workbook.active()属性来得到它。

    ws = wb.active
    

    注意这个函数使用了_active_sheet_index属性,默认的值为0。除非你更改了它的值,否则你将会一直使用这个方法去创建新的工作表

    你也可以使用openpyxl.workbook.Workbook.create_sheet()方法来创建新的工作表。

    ws1 = wb.creat_sheet() # 默认是在结尾插入
    

    或者

    ws2 = wb.creat_sheet(0) # 在第一个位置插入
    

    表格在被创建的时候会自动的有一个名字。它们被命名在一个队列中(表格1 、表格2、表格3...),你可以使用title属性在任何时候来改变它们的名字。

    ws.title = "New Title"
    

    表格名字的背景颜色默认是白色,你可以使用sheet_properties.tabColor属性来更改这个设定(使用RRGGBB颜色)

    ws.sheet_properties.taabColor = "1072BA"
    

    一但你给了一个工作表名字,你就得到了这个工作簿和方法openpyxl.workbook.Workbook.get_sheet_by_name()的键

    ws3 = wb["New Title"]
    ws4 = wb.get_sheet_by_name("New Title")
    ws is ws3 is ws4
    #True
    

    你可以通过openpyxl.workbook.Workbook.get_sheet_names()方法来检查工作簿中所有工作表的名字。

    print(wb.get_sheet_names())
    #['Sheet2','New title','Sheet1']
    

    你可以循环这些表格

    for sheet in wb:
        print(sheet.title)
    

    使用数据,访问一个表格

    我们已经知道如何去访问一个工作表,可以开始修饰表格内容了
    表格可以很直观的通过工作表的键来进行访问

    c = ws['A4']
    

    这个会返回一个在A4位置的表格,如果没有这个表格就会创建一个。数据会被直接分配。

    ws['A4'] = 4
    

    同样这也有一个方法openpyxl.worksheet.Worksheet.cell()

    c = ws.cell('A4')
    

    你也可以使用行和列标记来访问表格

    d = ws.cell(row = 4, clumn = 2)
    

    注意当一个工作表在内存中被创建时,它里面是没有表格的。它们在第一次被访问的时候才会被创建。我们没有通过这种方法创建一个永远不会被访问的对象,从而来减少内存占用。

    警告因为这个特性,我们要循环表格而不是直接访问它们,这样会将所有的表格在内存中创建,就算你没有访问它们中的任何一个值。示例:

    for i in range(1,101):
           for j in range(1,101):
                  ws.cell(row = i, column = j)
    

    这样会在内存中创建一个100 X 100的表格而不会有热河影响
    当然这也是一个清除所有我们不想要的表格的方法,这在以后我们会介绍。

    访问更多的表格

    表格的范围也可以使用一些条件来访问

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

    你也可以使用这个方法openpyxl.worksheet.Worksheet.iter_rows()

    tuple(ws.iter_rows('A1':'C2'))
    ((<Cell Sheet1.A1>,<Cell Sheet1.B1>,<Cell Sheet1.C1>),(<Cell Sheet.A2>,<Cell Sheet.B2>,<Cell Sheet.C2>))
    for row in ws.iter_rows('A1:C2'):
           for cell in row:
               print cell
     <Cell Sheet1.A1>
     <Cell Sheet1.B1>
     <Cell Sheet1.C1>
     <Cell Sheet1.A2>
     <Cell Sheet1.B2>
     <Cell Sheet1.C2>
    

    如果你需要迭代一个文件中所有的行或者列,你也可以使用openpyxl.worksheet.Worksheet.rows()这个方法

    ws = wb.active
    ws['C9'] = 'hello world'
    ws.rows
    ((<Cell Sheet.A1>, <Cell Sheet.B1>, <Cell Sheet.C1>),
    (<Cell Sheet.A2>, <Cell Sheet.B2>, <Cell Sheet.C2>),
    (<Cell Sheet.A3>, <Cell Sheet.B3>, <Cell Sheet.C3>),
    (<Cell Sheet.A4>, <Cell Sheet.B4>, <Cell Sheet.C4>),
    (<Cell Sheet.A5>, <Cell Sheet.B5>, <Cell Sheet.C5>),
    (<Cell Sheet.A6>, <Cell Sheet.B6>, <Cell Sheet.C6>),
    (<Cell Sheet.A7>, <Cell Sheet.B7>, <Cell Sheet.C7>),
    (<Cell Sheet.A8>, <Cell Sheet.B8>, <Cell Sheet.C8>),
    (<Cell Sheet.A9>, <Cell Sheet.B9>, <Cell Sheet.C9>))
    

    或者openpyxl.worksheet.Worksheet.columns()这个方法

    ws.columns
    ((<Cell Sheet.A1>,
    <Cell Sheet.A2>,
    <Cell Sheet.A3>,
    <Cell Sheet.A4>,
    <Cell Sheet.A5>,
    <Cell Sheet.A6>,
    ...
    <Cell Sheet.B7>,
    <Cell Sheet.B8>,
    <Cell Sheet.B9>),
    (<Cell Sheet.C1>,
    <Cell Sheet.C2>,
    <Cell Sheet.C3>,
    <Cell Sheet.C4>,
    <Cell Sheet.C5>,
    <Cell Sheet.C6>,
    <Cell Sheet.C7>,
    <Cell Sheet.C8>,
    <Cell Sheet.C9>))
    

    数据存储

    我们有一个openpyxl.cell,Cell的方法让我们给表格赋一个值。

    c.value = ‘hello, world’
    print(c.value)
    #'hello, world'
    
    d,value = 3.14
    print(d.value)
    #3.14
    

    你也可以用它做类型和成员判断

    wb = Workbook(guess_types=True)
    c.value = '12%'
    print(c.value)
    #0.12
    
    import datetime
    d.value = datetime.datetime.now()
    print(d.value)
    #datetime.datetime(2010, 9, 10,22, 25, 18)
    
    c.value = '31.50'
    print(c.value)
    #31.5
    

    2.保存至文件

    保存一个工作簿最常见和最安全的方法是使用openpyxl.workbook.Workbook.save(),这是openpyxl.workbook.Workbook对象的方法

    wb = Workbook()
    Wb.save('balances.xlsx')
    

    警告这个操作会在没有提示的情况下复写现有的文件。

    注意文件扩展名不会强制写成xlsx或xlsm,如果你没有使用一个合法的扩展名的话,在你使用其他软件直接打开这个文件的时候会出一些错误。

    像基础压缩文件OOXML之类的,你也可以使用.zip来作为文件名的结尾,并使用你最常用的ZIP文件编辑工具来打开它。

    你可以指定属性as_template = True来将文档保存为模板

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

    警告在保存文档至文档模板中时,你应该注意数据类型和文件扩展名,反之亦然,另外结果表引擎不会打开文档。

    注意下面这几个例子会出错。

    wb = load_workbook('document.xlsx')
    #Need to save with the extension *.xlsx
    wb.save('new_document.xlsm')
    # MS Excel can't open the document
    # or
     # Need specify attribute keep_vba=True
    
    wb = load_workbook('document.xlsm')
    wb.save('new_document.xlsm')
    # MS Excel can't open the document
    
    # or
     wb = load_workbook('document.xltm', keep_vba=True)
     #If us need template document, then we need specify extension as *.xltm.
     # If us need document, then we need specify attribute as_template=False.
     wb.save('new_document.xlsm', as_template=True)
     # MS Excel can't open the document
    

    3.从文件加载

    和写的方法一样,你可以导入方法openpyxl.load_workbook()来打开一个活跃的工作簿:

    from openpyxl import load_workbook
    wb2 = load_workbook('test.xlsx')
    peint wb2.get_sheet_name()
    ['Sheet2','New Title','Sheet1']
    

    现在基础教程到此就结束了,你可以开始简单的用法教程。

    相关文章

      网友评论

          本文标题:openpyxl

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