首页 > python学习 > python使用openpyxl模块操作excel
2020
03-04

python使用openpyxl模块操作excel

python中的openpyxl模块可以操作excel文件。

使用pip安装pip install openpyxl

支持流行的lxml库(如果已安装)。这在创建大文件时特别有用。

为了能够将图像(jpeg,png,bmp等)包含到文件中,需要安装'pillow'库:pip install pillow

1、创建一个excel对象

import openpyxl
wb=openpyxl.Workbook() #创建一个新的空白excel对象
wb=openpyxl.load_workbook('file_name.xlsx') # 打开一个已存在的文件
获取打开的excel对象中所有的工作表(新的空白excel对象默认有一个名称为"Sheet"的工作表):
    1>wb.sheetnames:获取所有工作表的名称的列表
    2>for sheet in wb:
        print(sheet.title)

2、创建新的工作表

wb.create_sheet(title=None, index=None)
    title为新创建的工作表名称
    index为新的工作表插入的位置,默认插到末尾

3、打开工作表

    ws=wb.active #打开第一个工作表对象
    ws=wb[titme] #工作表的title可以作为key进行索引
    ws=wb.get_sheet_by_name(title) #通过工作表的title打开
    获取最大行,最大列
    sheet.max_row
    sheet.max_column
    设置行高和列宽:
    ws.row_dimensions[rowx].height = height_num
    ws.column_dimensions['C'].width = width_num
    合并和拆分单元格:
    merge_cells(range_string=None, start_row=None, start_column=None, end_row=None, end_column=None)
        方法1:ws.merge_cells('A1:C3') #合并一个矩形区域中的单元格
        方法2:ws.merge_cells(start_row=None, start_column=None, end_row=None, end_column=None)
        由于省略了第一个参数,后面的参数要使用关键字
    merge_cells(range_string=None, start_row=None, start_column=None, end_row=None, end_column=None)
        使用方法同上
    改变工作表按钮颜色
    ws.sheet_properties.tabColor = "1072BA"
    删除工作表
    wb.remove(sheet)
    del wb[sheet_name]

4、读取或修改单元格

4.1:单一单元格

    cl1= ws['B6'] #直接通过索引获取单元格对象
    cl2 = ws.cell(rowx, colx, value=None) #通过行和列获取单元格对象,如果提供了value值,则同时更改该单元格值
    获取到单元格对象之后通过属性column、row、is_date、font、value、aligment、border等属性获取和修改相关值
    设置字体样式:
    ws['B6'].font=openpyxl.styles.Font(name='字体名称',size=数字字号, italic=是否斜体, color='16进制颜色', bold=是否加粗)
    设置文字对齐方式:
    ws['B6'].alignment=openpyxl.styles.Alignment(horizontal="水平对齐",vertical="垂直对齐",text_rotation=旋转角度,wrap_text=是否自动换行)
        horizontal可能的值:左对齐left、居中center、右对齐right、分散对齐distributed、跨列居中centerContinuous、两端对齐justify、填充fill、常规general
        vertical可能的值:居中center、还可以靠上top、靠下bottom、两端对齐justify、分散对齐distributed
        wrap_text参数还可以写成wrapText
    设置单元格边框样式:
        side1=openpyxl.styles.Side(style="dotted",color="16进制颜色")
        side2=openpyxl.styles.Side(style="thin",color="16进制颜色")
        style可能的值'double', 'dashed', 'medium', 'dashDot', 'dashDotDot', 'mediumDashed', 'thin', 'thick', 'slantDashDot', 'hair', 'mediumDashDotDot', 'mediumDashDot', 'dotted'
        ws['B6'].border = openpyxl.styles.Border(left=side1,right=side1,top=side2,bottom=side2)

4.2:多单元格

    cell_list1 = ws['A1':'C2'] #使用类似切片的方式获取所有单元格对象列表
    cell_list2 = ws['C'] # 获取C列(第三)列的所有单元格对象列表
    cell_list3 = ws['C:E'] # 获取C列到E列(C列、D列、E列)的所有单元格对象列表
    cell_list4 = ws[10] #获取第10行的所有单元格对象列表
    cell_list5 = ws[5:10] #获取第5行到第10行的所有单元格对象列表
    cell_list6 = ws.iter_rows(min_row=None, max_row=None, min_col=None, max_col=None, values_only=False)
        返回指定范围的所有单元格对象,返回格式中每行为一个元祖,然后由这些元祖组成列表,min_*不提供默认为1

4.3:获取所有单元格

    all_sell1=ws.rows #返回所有单元格对象,返回格式中每行为一个元祖,然后由这些元祖组成列表
    all_sell2=ws.columns #返回所有单元格对象,返回格式中每列为一个元祖,然后由这些元祖组成列表

5、保存成文件

wb.save('file_name.xlsx')

其他操作

1、添加一行到当前sheet的最底部

append(['This is A1', 'This is B1', 'This is C1'])
    如果是list,将list从头到尾顺序添加
append({'A' : 'This is A1', 'C' : 'This is C1'})
    如果是dict,按照相应的键添加相应的键值

2、根据列数字得到字母,根据字母得到列数字

    openpyxl.utils.get_column_letter(num)
    openpyxl.utils.column_index_from_string(str)
最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。