python3操作Excel (一)

发布时间:2019-09-27 07:13:18编辑:auto阅读(1988)

    #第一篇:
    ##openpyxl 模块使用:

    安装:
    pip install openpyxl

    excel表中有图像,需要安装pillow库。
    pip install Pillow

    代码:

       from openpyxl import Workbook
        wb = Workbook()
    
        # grab the active worksheet
        ws = wb.active
    
        # Data can be assigned directly to cells
        ws['A1'] = 42
    
        # Rows can also be appended
        ws.append([1, 2, 3])
    
        # Python types will automatically be converted
        import datetime
        ws['A2'] = datetime.datetime.now()
    
        # Save the file
        wb.save("sample.xlsx")

    openpyxl模块使用:

    创建一个工作簿:

    from openpyxl import Workbook
    wb = Workbook() 

    工作簿最少有一个工作表:
    openpyxl.workbook.Workbook.active()

    ws = wb.active

    wb的_active_sheet_index 属性,默认情况下为0.来获取第一个工作表。
    修改值之后,可以获取该值对应的工作表。

    也可以创建一个新的工作表,需要使用openpyxl.workbook.Workbook.create_sheet() method

    // 添加一个新的工作表:

    #在默认工作表后面创建一个新的工作表。
    ws1 = wb.create_sheet("twosheet")
    
    #在默认工作表前面创建一个新的工作表。0 为索引值。
    ws2 = wb.create_sheet('onesheet',0)

    在创建工作表时,默认自动命名sheet1,sheet2,...

    可使用title属性更改sheet1,sheet2,....等名称。
    例如:

    ws1.title = "2sheet"

    默认情况下,title的背景颜色为白色,可更改为:
    可以将此提供RRGGBB颜色代码更改为sheet_properties.tabColor属性: 该效果我没有做出来,有待研究。

    ws.sheet_properties.tabColor = "1072BA"

    你可以把一个创建之后的工作表的名字,作为工作簿的一个键。

    ws3 = wb['onesheet']
    print(ws3)

    输出值为:
    <Worksheet "onesheet">

    说明你可以选择使用哪个工作表来写入数据。

    查看工作簿的所有工作表的名称:
    openpyxl.workbook.Workbook.sheetnames() property

    print(wb.sheetnames)  #打印出来为list。

    可以选择循环浏览工作表名称:
    for sheet in wb:
    print(type(sheet.title))
    print(sheet.title)
    #打印出来为str.

    可以在单个工作簿中创建工作表副本:
    openpyxl.workbook.Workbook.copy_worksheet() method:
    source = wb.active
    target = wb.copy_worksheet(source)
    #默认将工作表添加到末尾。

    • 注意:

    只有单元格(包括值,样式,超链接和注释)和某些工作表属性(包括尺寸,格式和属性)被复制。所有其他工作簿/工作表属性不会被复制 - 例如图片,图表。
    您不能在工作簿之间复制工作表。如果工作簿以只读或只写模式打开,您也无法复制工作表。

    ####插入数据
    访问单元格并修改单元格内容:

    单元格可以作为工作表的键直接访问。

    ws = wb['Sheet']
    print(ws)

    注意:
    访问之前,必须先让其工作在Sheet工作表上。
    c = ws['A4']
    print(c)

    这将返回A4处的单元格或创建一个,如果它尚不存在。值可以直接分配:

    ws['A4'] = 4

    还有
    openpyxl.worksheet.Worksheet.cell() method.

    这使用行和列表示法提供对单元格的访问权限:

    d = ws.cell(row=4,column=2,value=10)
    print(type(d))
    print(d)

    注意:
    当工作表在内存中创建时,它不包含单元格。它们在第一次访问时创建。

    由于这个特性,即使没有为它们赋值,通过滚动单元格而不是直接访问它们也会在内存中创建它们。

    for i in range(1,101):
    for j in range(1,101):
        ws.cell(row=i,column=j)
        print(type(j))
        print(j)
    #将在内存中创建100x100的单元格,无需任何操作。

    可以使用切片访问单元格的范围:

    cell_range = ws['A1':'C2']
    print(type(cell_range))
    print(cell_range)
    #type is tuple.

    行或列的范围可以类似地获得:

    colC = ws['C']
    col_range = ws['C:D']
    row10 = ws[10]
    row_range = ws[5:10]

    也可以用:
    openpyxl.worksheet.Worksheet.iter_rows() method:

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

    openpyxl.worksheet.Worksheet.iter_cols()
    method will return columns:

    for col in ws.iter_rows(min_row=1,max_col=3,max_row=2):
    for cell in col:
        print(cell)

    需要遍历文件的所有行或列,使用
    openpyxl.worksheet.Worksheet.rows() property:

    #遍历文件的所有行
    ws = wb.active
    ws['C9'] = 'li yuan jie'
    print(tuple(ws.rows))

    or use
    openpyxl.worksheet.Worksheet.columns() property:

    #遍历文件的所有列:
    ws = wb.active
    ws['C9'] = 'li yuan jie'
    print(tuple(ws.columns))

    #####Data storage
    openpyxl.cell.Cell, we can assign it a value:

    c = ws['A1']    #指定A1单元格
    c.value = 'li yuan jie'
    print(c.value)
    
    d = ws['B1']
    d.value = 3.14
    print(d.value)

    也可以启用类型和格式推断:

    c = ws['A2']
    c.value = '12%'
    print(type(c.value))  #type is str
    print(c.value)
    
    import datetime
    d = ws['B2']
    d.value = datetime.datetime.now()  
    print(type(d.value))  #type is 'datetime.datetime'
    print(d.value)
    
    c.value = '31.50'
    print(type(c.value))   #type is str
    print(c.value)

    Saving to a file
    The simplest and safest way to save a workbook is by using the:
    openpyxl.workbook.Workbook.save() method of the openpyxl.workbook.Workbook object:

    wb = Workbook()
    wb.save('onepyxl.xlsx')

    注意: 此操作将覆盖现有文件。

    可以指定属性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)

    注意: excel表的数据属性和扩展名。

    ####加载一个文件
    导入
    openpyxl.load_workbook() to open an existing workbook:

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

    如有不足之处,请指正。

    参考:
    https://openpyxl.readthedocs.io/en/latest/
    https://openpyxl.readthedocs.io/en/2.5/

关键字