• openpyxl


    openpyxl

      xlrd/xlwt操作03版本之前的Excel文件,openpyxl操作03版本之后的Excel文件。

    安装

    方式一

      在pycharm下面的命令行中输入如下代码:

    pip install openpyxl

    方式二

      在Pycharm的File→Settings...→Project:xxoo→Project Interperter中的

    中右上角的+或者双击列表框中的任何一个库名都可以,弹出如下框:

    选中openpyxl,然后点击左下角的Install Package按钮即可安装。

    注意

      如果excel里面有图片(jpeg,png,bmp。。。),需要安装图片处理模块pillow模块。

    pip install pillow

    使用

      在使用之前需要先导入模块openpyxl

    from openpyxl import Workbook

      在写之前需要先初始化,也就是先实例化一个对象。

    wb = Workbook()

    创建一个新的工作簿

    ws1 = wb.create_sheet('Mysheet1')  # 默认是最后一个
    ws2 = wb.create_sheet('Mysheet2', 0)  # 第一个

      创建完成以后,还需要保存下文件。

    wb.save('write.xlsx')  # write.xlsx为文件名加文件后缀名

    获取单元格数据

      在进行工作簿数据读取之前,先进行模块导入

    from openpyxl import load_workbook

      然后进行实例化,插入需要读取的表格文件的文件名。打开的文件,默认的是read_only=False,即可读可写,若有需要,可以指定read_only为True,即只读模式。

    wb = load_workbook(filename='write.xlsx')  # write.xlsx是Excel文件名。

      最后选中目标工作簿,进行取值。其中,new_name为工作簿的名字。

    sheet = wb['new_name']
    print(sheet['B1'].value)

      当目标单元格内填充的为公式时,需要指定data_only=True,这样返回的就是数字,如果不加这个参数,则读取到的是公式本身。

    获取工作簿名称

    获取所有工作簿名称
    wb.sheetnames
    获取单个工作簿名称
    for i in sheet in wb:
        print(sheet)

    获取工作簿

      直接获取名称为new_name的工作簿。

    wb['new_name']

    获取行

    获取最大行数
    sheet.max_row
    获取每一行的值

    sheet.rows为生成器,里面是每一行的数据,每一行又由一个tuple包裹。

    for row in sheet.rows:
        for cell in row:
            print(cell.value)

      因为是按行,所以返回值的顺序为A1、B1、C1。

    获取列

    获取最大列数
    sheet.max_column
    获取每一列的值

      与sheet.rows类似,不过这里的每一个元组是每一列的单元格的值。

    for column in sheet.columns:
        for cell in column:
            print(cell.value)

      因为按列,所以输出结果的顺序为A1、A2、A3。

    获取任意单元格的值

    使用索引获取单个单元格的值

      上面的代码是获取所有的单元格的数据,如果要获得某行的数据,给其一个索引就行了,因为sheet.rows与sheet.columns是生成器类型的,不能使用索引,转换成list之后在使用索引,list(sheet.rows)[2]这样就可以获取到第三行或者列的tuple对象。

    for cell in list(sheet.rows)[2]:
        print(cell.value)
    获取任意区间的单元格

      可以使用range函数,上面的写法,获得了以A1为左上角,B3为右下角矩形区域的所有的单元格、需要注意的是,range从1开始的,因为在openpyxl中为了和Excel中的表达方式一致,并不和编程语言的习惯以0表示第一个值。

    for i in range(1, 4):
        for j in range(1, 3):
            print(sheet.cell(row=i, column=j).value)

      还可以使用切片的方式。sheet['A1', 'B2']返回一个元组,该元组内部还是元组,由每一行的单元格构成一个元组。

    for row_cell in sheet['A1': 'B3']:
        for cell in row_cell:
            print(cell)

    修改工作簿的名字

    ws1 = wb.create_sheet('Mysheet1') 
    ws1.title = 'new_name'
    print(wb.sheetnames)  # 打印所有的工作簿的名字,以列表的形式展现
    wb.save('write.xlsx')

    修改或设置指定单元格的内容

    方式一

      设置A4出的单元格的内容,如果需要修改的单元格不存在,则创建该单元格,然后将值写入。

    ws1['A4'] = 4 
    wb.save('write.xlsx')
    方式二

      通过cell来进行写入,通过行数和列数找到单元格,通过value进行赋值。

    ws1.cell(row=4, column=2, value=10)
    wb.save('write.xlsx')

    append函数

      可以一次添加多行数据,从第一行空白行开始(下面所有的都是空白行)写入。

      将row中的值分别写入到第一行的单元格中。其中row的值的类型必须是列表、元组、一个范围(range)、生成器。

    row = [1, 2, 3, 4, 5]
    ws1.append(row)
    wb.save('write.xlsx')

    设置单元格风格

       在设置之前需要先导入模块

    from openpyxl.styles import Font, colors, Alignment  # 字体、颜色、对齐方式

    设置字体样式

    bold_italic_24_font = Font(name='等线', size=24, italic=True, color=colors.RED, bold=True)
    sheet['A1'].font = bold_italic_24_font

     设置对其方式

    居中方式

      直接使用属性aligment,这里指定垂直居中和左右居中。除了center,还可以使用right、left等等参数。

    sheet['B1'].aligment = Alignment(horizontal='center', vertical='center')
    行高
    sheet.row_dimensions[2].height = 40  # 第二行行高
    列宽
    sheet.column_dimensions['C'].width = 30  # C列列宽

     合并和拆分单元格

    合并单元格

       以合并区域的右上角的那个单元格为基准,覆盖其他单元格,称之为一个大单元格。

      合并单元格,往左上角单元格写入数据。如果这些单元格都有数据,则只保存左上角的单元格的数据。

    合并一行中的单元格
    sheet.merge_cells('B1:G1')  # 合并一行中的单元格
    合并矩形区域的单元格
    sheet.merge_cells('A1:C3')

    拆分单元格

      将一个大单元格拆分为几个小单元格。拆分完成后,大单元格中的值回到A1的位置。

    sheet.unmerge_cells('A1:C3')
  • 相关阅读:
    bzoj 1121: [POI2008]激光发射器SZK 思维_结论
    bzoj 1189: [HNOI2007]紧急疏散evacuate 分层图最大流 + 拆点 + 二分
    luogu 3467 [POI2008]PLA-Postering 单调栈
    BZOJ1143: [CTSC2008]祭祀river 网络流_Floyd_最大独立集
    BZOJ 1123: [POI2008]BLO 求割点+乘法原理+计数
    bzoj 1191: [HNOI2006]超级英雄Hero 网络流 + 残量网络
    无题
    numpy模块(对矩阵的处理,ndarray对象)
    python面向过程编程
    logging模块,程序日志模板
  • 原文地址:https://www.cnblogs.com/ZN-225/p/10572557.html
Copyright © 2020-2023  润新知