精华内容
下载资源
问答
  • openpyxl模块

    2020-05-27 11:19:33
    openpyxl模块感兴趣,想要有更深入的了解的话,推荐阅读openpyxl模块的官方文档: icon https://openpyxl.readthedocs.io/en/stable/

    openpyxl模块感兴趣,想要有更深入的了解的话,推荐阅读openpyxl模块的官方文档:

    icon
    https://openpyxl.readthedocs.io/en/stable/

    展开全文
  • openpyxl 模块

    千次阅读 2017-04-04 23:23:11
    openpyxl 模块是解决 Microsoft Excel 2007/2010 之类的版本中扩展名是 xlsx/xlsm/xltx/xltm 的文件的读写的第三方库。 openpyxl 的安装 sudo pip install openpyxl openpyxl 的写操作 from openpyxl ...

    简介

    openpyxl 模块是解决 Microsoft Excel 2007/2010 之类的版本中扩展名是 xlsx/xlsm/xltx/xltm 的文件的读写的第三方库。

    openpyxl 的安装

    sudo pip install openpyxl

    openpyxl 的写操作

    from openpyxl import Workbook
    wb = Workbook()
    ws = wb.active  #该语句表示在当前工作薄中建立了一个 sheet,并且它是当前正在使用的
    ws.title = "python" # ws 所引用的 sheet 对象名字设置为 python
    for i in range(1,50): #创建 50 行,3列的表格,其中 row 代表行,column 代表列
        ws.cell(row=i,column=1,value="{}".format('你是谁'))
        ws.cell(row=i,column=2,value="{}".format('他是谁'))
        ws.cell(row=i,column=3,value="{}".format('我是谁'))
    wb.save('abc.xlsx')
    

    注意:行和列,必须从1开始


    openpyxl 的读操作

    from openpyxl import load_workbook
    wb = load_workbook('abc.xlsx')
    ws_wb = wb.get_sheet_by_name('python')  #通过表名获取 sheet
    for row in ws_wb.rows:
        for cell in row:
            print cell.value
    
    获取行数和列数:
    rows = ws_wb.max_row   #获取行数
    cols = ws_wb.max_column    #获取列数
    
    #设定单元格的值,两种方式
    ws_wb.cell(row=2,column=5).value=99
    ws_wb.cell(row=3,column=5,value=100)
    
    
    展开全文
  • 本文介绍一下使用Python对Excel文件的基本操作,包括使用xlrd模块读取excel文件,使用xlwt模块将数据写入excel文件,使用openpyxl模块读取写入和修改excel文件。 目录 1、使用xlrd模块对xls文件进行读操作 1.1...

     

    本文介绍一下使用Python对Excel文件的基本操作,包括使用xlrd模块读取excel文件,使用xlwt模块将数据写入excel文件,使用openpyxl模块读取写入和修改excel文件。

    【最近一些朋友反映个别代码无法调试(但是在我这里没问题),这里代码我都是调试过的,之前一年也没有朋友反馈过这些问题,所以大概率是版本问题。

    我的版本如下: xlrd 1.1.0 、xlwt 1.3.0 、openpyxl 2.5.4 】

     

    目录

    1、使用xlrd模块对xls文件进行读操作

    1.1 获取工作簿对象

    1.2 获取工作表对象

    1.3 获取工作表的基本信息

    1.4 按行或列方式获得工作表的数据

    1.5 获取某一个单元格的数据

    2、使用xlwt模块对xls文件进行写操作

    2.1 创建工作簿

    2.2 创建工作表

    2.3 按单元格的方式向工作表中添加数据

    2.4 按行或列方式向工作表中添加数据

    2.5 保存创建的文件

     3、使用openpyxl模块对xlsx文件进行读操作

    3.1 获取工作簿对象

    3.2 获取所有工作表名

    3.3 获取工作表对象

    3.4 根据索引方式获取工作表对象

    3.5 获取工作表的属性

    3.6 按行或列方式获取表中的数据

    3.7 获取特定行或特定列的数据

    3.8 获取某一块的数据

    3.9 获取某一单元格的数据

    4、使用openpyxl模块对xlsx文件进行写操作

    4.1 创建工作簿和获取工作表

    4.2 创建新的工作表

    4.3 将数据写入工作表

    4.4 保存工作簿

    5、修改已经存在的工作簿(表)

    5.1 插入一列数据

    5.2 修改特定单元格

    5.3 批量修改数据


    1、使用xlrd模块对xls文件进行读操作

    假设我们的表如下,是一个“农村居民家庭人均纯收入和农村居民家庭人均消费情况”的表格。后缀为.xls。里面包含两个工作表,“各省市”和“测试表”。

    提一下,一个Excel文件,就相当于一个“工作簿”(workbook),一个“工作簿”里面可以包含多个“工作表(sheet)”

     

    1.1 获取工作簿对象

    引入模块,获得工作簿对象。

    
    import xlrd  #引入模块
    
    #打开文件,获取excel文件的workbook(工作簿)对象
    workbook=xlrd.open_workbook("DataSource/Economics.xls")  #文件路径
    
    
    

    1.2 获取工作表对象

    我们知道一个工作簿里面可以含有多个工作表,当我们获取“工作簿对象”后,可以接着来获取工作表对象,可以通过“索引”的方式获得,也可以通过“表名”的方式获得。

    '''对workbook对象进行操作'''
    
    #获取所有sheet的名字
    names=workbook.sheet_names()
    print(names) #['各省市', '测试表']  输出所有的表名,以列表的形式
    
    #通过sheet索引获得sheet对象
    worksheet=workbook.sheet_by_index(0)
    print(worksheet)  #<xlrd.sheet.Sheet object at 0x000001B98D99CFD0>
    
    #通过sheet名获得sheet对象
    worksheet=workbook.sheet_by_name("各省市")
    print(worksheet) #<xlrd.sheet.Sheet object at 0x000001B98D99CFD0>
    
    #由上可知,workbook.sheet_names() 返回一个list对象,可以对这个list对象进行操作
    sheet0_name=workbook.sheet_names()[0]  #通过sheet索引获取sheet名称
    print(sheet0_name)  #各省市
    
    

    1.3 获取工作表的基本信息

    在获得“表对象”之后,我们可以获取关于工作表的基本信息。包括表名、行数与列数。

    '''对sheet对象进行操作'''
    name=worksheet.name  #获取表的姓名
    print(name) #各省市
    
    nrows=worksheet.nrows  #获取该表总行数
    print(nrows)  #32
    
    ncols=worksheet.ncols  #获取该表总列数
    print(ncols) #13
    

    1.4 按行或列方式获得工作表的数据

    有了行数和列数,循环打印出表的全部内容也变得轻而易举。

    for i in range(nrows): #循环打印每一行
        print(worksheet.row_values(i))  #以列表形式读出,列表中的每一项是str类型
    #['各省市', '工资性收入', '家庭经营纯收入', '财产性收入', ………………]
    #['北京市', '5047.4', '1957.1', '678.8', '592.2', '1879.0,…………]
    
    col_data=worksheet.col_values(0)  #获取第一列的内容
    print(col_data)
    
    

    1.5 获取某一个单元格的数据

     我们还可以将查询精确地定位到某一个单元格。

    在xlrd模块中,工作表的行和列都是从0开始计数的。

    #通过坐标读取表格中的数据
    cell_value1=sheet0.cell_value(0,0)
    cell_value2=sheet0.cell_value(1,0)
    print(cell_value1)  #各省市
    print(cell_value2)   #北京市
    
    cell_value1=sheet0.cell(0,0).value
    print(cell_value1) #各省市
    cell_value1=sheet0.row(0)[0].value
    print(cell_value1)  #各省市

     

     

    2、使用xlwt模块对xls文件进行写操作

    2.1 创建工作簿

    
    # 导入xlwt模块
    import xlwt
    
    #创建一个Workbook对象,相当于创建了一个Excel文件
    book=xlwt.Workbook(encoding="utf-8",style_compression=0)
    
    '''
    Workbook类初始化时有encoding和style_compression参数
    encoding:设置字符编码,一般要这样设置:w = Workbook(encoding='utf-8'),就可以在excel中输出中文了。默认是ascii。
    style_compression:表示是否压缩,不常用。
    '''
    

    2.2 创建工作表

    创建完工作簿之后,可以在相应的工作簿中,创建工作表。

    
    # 创建一个sheet对象,一个sheet对象对应Excel文件中的一张表格。
    sheet = book.add_sheet('test01', cell_overwrite_ok=True)
    # 其中的test是这张表的名字,cell_overwrite_ok,表示是否可以覆盖单元格,其实是Worksheet实例化的一个参数,默认值是False
    

    2.3 按单元格的方式向工作表中添加数据

    
    # 向表test中添加数据
    sheet.write(0, 0, '各省市')  # 其中的'0-行, 0-列'指定表中的单元,'各省市'是向该单元写入的内容
    sheet.write(0, 1, '工资性收入')
    
    #也可以这样添加数据
    txt1 = '北京市'
    sheet.write(1,0, txt1)  
    txt2 = 5047.4
    sheet.write(1, 1, txt2)

     最后被文件被保存之后,上文语句形成的“工作表”如下所示:

    2.4 按行或列方式向工作表中添加数据

    为了验证这个功能,我们在工作簿中,再创建一个工作表,上个工作表叫“test01”,那么这个工作表命名为“test02”,都隶属于同一个工作簿。在下面代码中test02是表名,sheet2才是可供操作的工作表对象。

    
    #添加第二个表
    sheet2=book.add_sheet("test02",cell_overwrite_ok=True)
    
    
    Province=['北京市', '天津市', '河北省', '山西省', '内蒙古自治区', '辽宁省',
              '吉林省', '黑龙江省', '上海市', '江苏省', '浙江省', '安徽省', '福建省',
              '江西省', '山东省', '河南省', '湖北省', '湖南省', '广东省', '广西壮族自治区',
              '海南省', '重庆市', '四川省', '贵州省', '云南省', '西藏自治区', '陕西省', '甘肃省',
              '青海省', '宁夏回族自治区', '新疆维吾尔自治区']
    
    Income=['5047.4', '3247.9', '1514.7', '1374.3', '590.7', '1499.5', '605.1', '654.9',
            '6686.0', '3104.8', '3575.1', '1184.1', '1855.5', '1441.3', '1671.5', '1022.7',
            '1199.2', '1449.6', '2906.2', '972.3', '555.7', '1309.9', '1219.5', '715.5', '441.8',
            '568.4', '848.3', '637.4', '653.3', '823.1', '254.1']
    
    Project=['各省市', '工资性收入', '家庭经营纯收入', '财产性收入', '转移性收入', '食品', '衣着',
             '居住', '家庭设备及服务', '交通和通讯', '文教、娱乐用品及服务', '医疗保健', '其他商品及服务']
    
    #填入第一列
    for i in range(0, len(Province)):
        sheet2.write(i+1, 0, Province[i])
    
    #填入第二列
    for i in range(0,len(Income)):
        sheet2.write(i+1,1,Income[i])
    
    #填入第一行
    for i in range(0,len(Project)):
        sheet2.write(0,i,Project[i])

    2.5 保存创建的文件

    最后保存在特定路径即可。

    # 最后,将以上操作保存到指定的Excel文件中
    book.save('DataSource\\test1.xls')  

    执行出来的工作表test02如下所示:

     

     

     3、使用openpyxl模块对xlsx文件进行读操作

     

    上面两个模块,xlrd和xlwt都是针对Excel97-2003操作的,也就是以xls结尾的文件。很显然现在基本上都是Excel2007以上的版本,以xlsx为后缀。要对这种类型的Excel文件进行操作要使用openpyxl,该模块既可以进行“读”操作,也可以进行“写”操作,还可以对已经存在的文件做修改。

     

    3.1 获取工作簿对象

    import openpyxl
    
    #获取 工作簿对象
    workbook=openpyxl.load_workbook("DataSource\Economics.xlsx")
    #与xlrd 模块的区别
    #wokrbook=xlrd.open_workbook(""DataSource\Economics.xls)

    3.2 获取所有工作表名

    #获取工作簿 workbook的所有工作表
    shenames=workbook.get_sheet_names()
    print(shenames)  #['各省市', '测试表']
    #在xlrd模块中为 sheetnames=workbook.sheet_names()
    
    #使用上述语句会发出警告:DeprecationWarning: Call to deprecated function get_sheet_names (Use wb.sheetnames).
    #说明 get_sheet_names已经被弃用 可以改用 wb.sheetnames 方法
    shenames=workbook.sheetnames
    print(shenames)  #['各省市', '测试表']
    

    3.3 获取工作表对象

    上一小节获取的工作表名,可以被应用在这一节中,用来获取工作表对象。

    #获得工作簿的表名后,就可以获得表对象
    worksheet=workbook.get_sheet_by_name("各省市")
    print(worksheet)  #<Worksheet "各省市">
    
    #使用上述语句同样弹出警告:DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
    #改写成如下格式
    worksheet=workbook["各省市"]
    print(worksheet)  #<Worksheet "各省市">
    
    #还可以通过如下写法获得表对象
    worksheet1=workbook[shenames[1]]
    print(worksheet1)  #<Worksheet "测试表">

    3.4 根据索引方式获取工作表对象

    上一小节获取工作表对象的方式,实际上是通过“表名”来获取,我们可以通过更方便的方式,即通过“索引”方式获取工作表对象。 

    #还可以通过索引方式获取表对象
    worksheet=workbook.worksheets[0]
    print(worksheet) #<Worksheet "各省市">
    
    #也可以用如下方式
    #获取当前活跃的worksheet,默认就是第一个worksheet
    ws = workbook.active

    3.5 获取工作表的属性

    得到工作表对象后,可以获取工作表的相应属性,包括“表名”、“行数”、“列数”

    #经过上述操作,我们已经获得了第一个“表”的“表对象“,接下来可以对表对象进行操作
    
    name=worksheet.title  #获取表名
    print(name)  #各省市
    #在xlrd中为worksheet.name
    
    #获取该表相应的行数和列数
    rows=worksheet.max_row
    columns=worksheet.max_column
    print(rows,columns)  #32 13
    #在xlrd中为 worksheet.nrows  worksheet.ncols

    3.6 按行或列方式获取表中的数据

    要想以行方式或者列方式,获取整个工作表的内容,我们需要使用到以下两个生成器:

    sheet.rows,这是一个生成器,里面是每一行数据,每一行数据由一个元组类型包裹。

    sheet.columns,同上,里面是每一列数据。

    for row in worksheet.rows:
        for cell in row:
            print(cell.value,end=" ")
        print()
    """
    各省市 工资性收入 家庭经营纯收入 财产性收入 转移性收入 食品 衣着 居住 家庭设备及服务 ……
    北京市 5047.4 1957.1 678.8 592.2 1879.0 451.6 859.4 303.5 698.1 844.1 575.8 113.1 ……
    天津市 3247.9 2707.4 126.4 146.3 1212.6 265.3 664.4 122.4 441.3 315.6 263.2 56.1 ……
    ……
    """
    
    for col in worksheet.columns:
        for cell in col:
            print(cell.value,end=" ")
        print()
    
    '''
    各省市 北京市 天津市 河北省 山西省 内蒙古自治区 辽宁省 吉林省 黑龙江省 上海市 江苏省 浙江省 ……
    工资性收入 5047.4 3247.9 1514.7 1374.3 590.7 1499.5 605.1 654.9 6686.0 3104.8 3575.1 ……
    家庭经营纯收入 1957.1 2707.4 2039.6 1622.9 2406.2 2210.8 2556.7 2521.5 767.7 2271.4  ……
    ……
    '''

    我们可以通过查看sheet.rows 里面的具体格式,来更好的理解代码

    
    for row in worksheet.rows:
        print(row)
    '''
    (<Cell '各省市'.A1>, <Cell '各省市'.B1>, <Cell '各省市'.C1>, <Cell '各省市'.D1>, <Cell '各省市'.E1>,……
    (<Cell '各省市'.A2>, <Cell '各省市'.B2>, <Cell '各省市'.C2>, <Cell '各省市'.D2>, <Cell '各省市'.E2>, ……
    ……
    '''
    #可知,需要二次迭代
    
    for row in worksheet.rows:
        for cell in row:
            print(cell,end=" ")
        print()
    
    '''
    <Cell '各省市'.A1> <Cell '各省市'.B1> <Cell '各省市'.C1> <Cell '各省市'.D1>……
    <Cell '各省市'.A2> <Cell '各省市'.B2> <Cell '各省市'.C2> <Cell '各省市'.D2> ……
    ……
    '''
    #还需要cell.value
    for row in worksheet.rows:
        for cell in row:
            print(cell.value,end=" ")
        print()
    

    3.7 获取特定行或特定列的数据

    上述方法可以迭代输出表的所有内容,但是如果要获取特定的行或列的内容呢?我们可以想到的是用“索引”的方式,但是sheet.rows是生成器类型,不能使用索引。所以我们将其转换为list之后再使用索引,例如用list(sheet.rows)[3]来获取第四行的tuple对象。

    #输出特定的行
    for cell in list(worksheet.rows)[3]:  #获取第四行的数据
        print(cell.value,end=" ")
    print()
    #河北省 1514.7 2039.6 107.7 139.8 915.5 167.9 531.7 115.8 285.7 265.4 166.3 47.0
    
    #输出特定的列
    for cell in list(worksheet.columns)[2]:  #获取第三列的数据
        print(cell.value,end=" ")
    print()
    #家庭经营纯收入 1957.1 2707.4 2039.6 1622.9 2406.2 2210.8 2556.7 2521.5 767.7 2271.4 3084.3……
    
    #已经转换成list类型,自然是从0开始计数。

    3.8 获取某一块的数据

    有时候我们并不需要一整行或一整列内容,那么可以通过如下方式获取其中一小块的内容。

    注意两种方式的区别,在第一种方式中,由于生成器被转换成了列表的形式,所以索引是从0开始计数的。

    而第二种方式,行和列都是从1开始计数,这是和xlrd模块中最大的不同,在xlrd中行和列都是从0计数的,openpyxl之所这么做是为了和Excel表统一,因为在Excel表,就是从1开始计数。

    for rows in list(worksheet.rows)[0:3]:
        for cell in rows[0:3]:
            print(cell.value,end=" ")
        print()
    '''
    各省市 工资性收入 家庭经营纯收入 
    北京市 5047.4 1957.1 
    天津市 3247.9 2707.4 
    '''
    
    for i in range(1, 4):
        for j in range(1, 4):
            print(worksheet.cell(row=i, column=j).value,end=" ")
        print()
    '''
    各省市 工资性收入 家庭经营纯收入 
    北京市 5047.4 1957.1 
    天津市 3247.9 2707.4 
    
    '''

    3.9 获取某一单元格的数据

    有两种方式。

    #精确读取表格中的某一单元格
    content_A1= worksheet['A1'].value
    print(content_A1)
    
    content_A1=worksheet.cell(row=1,column=1).value
    #等同于 content_A1=worksheet.cell(1,1).value
    print(content_A1)
    #此处的行数和列数都是从1开始计数的,而在xlrd中是由0开始计数的

     

     

    4、使用openpyxl模块对xlsx文件进行写操作

    4.1 创建工作簿和获取工作表

    同样的workbook=openpyxl.Workbook() 中“W”要大写。

    import openpyxl
    
    # 创建一个Workbook对象,相当于创建了一个Excel文件
    workbook=openpyxl.Workbook()
    #wb=openpyxl.Workbook(encoding='UTF-8')
    
    #获取当前活跃的worksheet,默认就是第一个worksheet
    worksheet = workbook.active
    worksheet.title="mysheet"

    4.2 创建新的工作表

    worksheet2 = workbook.create_sheet()   #默认插在工作簿末尾
    #worksheet2 = workbook.create_sheet(0)  #插入在工作簿的第一个位置
    worksheet2.title = "New Title"

    4.3 将数据写入工作表

    #以下是我们要写入的数据
    Province=['北京市', '天津市', '河北省', '山西省', '内蒙古自治区', '辽宁省',
              '吉林省', '黑龙江省', '上海市', '江苏省', '浙江省', '安徽省', '福建省',
              '江西省', '山东省', '河南省', '湖北省', '湖南省', '广东省', '广西壮族自治区',
              '海南省', '重庆市', '四川省', '贵州省', '云南省', '西藏自治区', '陕西省', '甘肃省',
              '青海省', '宁夏回族自治区', '新疆维吾尔自治区']
    
    Income=['5047.4', '3247.9', '1514.7', '1374.3', '590.7', '1499.5', '605.1', '654.9',
            '6686.0', '3104.8', '3575.1', '1184.1', '1855.5', '1441.3', '1671.5', '1022.7',
            '1199.2', '1449.6', '2906.2', '972.3', '555.7', '1309.9', '1219.5', '715.5', '441.8',
            '568.4', '848.3', '637.4', '653.3', '823.1', '254.1']
    
    Project=['各省市', '工资性收入', '家庭经营纯收入', '财产性收入', '转移性收入', '食品', '衣着',
             '居住', '家庭设备及服务', '交通和通讯', '文教、娱乐用品及服务', '医疗保健', '其他商品及服务']
    
    #写入第一行数据,行号和列号都从1开始计数
    for i in range(len(Project)):
        worksheet.cell(1, i+1,Project[i])
    
    #写入第一列数据,因为第一行已经有数据了,i+2
    for i in range(len(Province)):
        worksheet.cell(i+2,1,Province[i])
    
    #写入第二列数据
    for i in range(len(Income)):
        worksheet.cell(i+2,2,Income[i])
    

    4.4 保存工作簿

    workbook.save(filename='DataSource\\myfile.xlsx')

    最后运行结果如下所示:

     

     

    5、修改已经存在的工作簿(表)

    5.1 插入一列数据

    将第四节中最后保存的myfile.xlsx作为我们要修改的表格,我们计划在最前面插入一列“编号”,如下所示:

    import openpyxl
    
    workbook=openpyxl.load_workbook("DataSource\myfile.xlsx")
    worksheet=workbook.worksheets[0]
    
    #在第一列之前插入一列
    worksheet.insert_cols(1)  #
    
    for index,row in enumerate(worksheet.rows):
        if index==0:
            row[0].value="编号"  #每一行的一个row[0]就是第一列
        else:
            row[0].value=index
    #枚举出来是tuple类型,从0开始计数
    
    workbook.save(filename="DataSource\myfile.xlsx")

    运行结果如下:

    5.2 修改特定单元格

    worksheet.cell(2,3,'0')
    worksheet["B2"]="Peking"

    运行结果如下:

    5.3 批量修改数据

    批量修改数据就相当于写入,会自动覆盖。在上一节中已经有介绍,不再赘述。

    还有sheet.append()方法,可以用来添加行。

    taiwan=[32,"台湾省"]
    worksheet.append(taiwan)

    运行结果如下:

     

     

    本文完。行笔匆忙,如有错误,还请指出。

    展开全文
  • openpyxl模块介绍openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读取和修改Excel文档。其他很多的与Excel相关的项目...

    openpyxl模块介绍

    openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读取和修改Excel文档。其他很多的与Excel相关的项目基本只支持读或者写Excel一种功能。

    安装openpyxl模块

    pip3 install openpyxl

    openpyxl基本用法

    想要操作Excel首先要了解Excel 基本概念,Excel中列以字幕命名,行以数字命名,比如左上角第一个单元格的坐标为A1,下面的为A2,右边的B1。

    openpyxl中有三个不同层次的类,Workbook是对工作簿的抽象,Worksheet是对表格的抽象,Cell是对单元格的抽象,每一个类都包含了许多属性和方法。

    操作Excel的一般场景:

    打开或者创建一个Excel需要创建一个Workbook对象

    获取一个表则需要先创建一个Workbook对象,然后使用该对象的方法来得到一个Worksheet对象

    如果要获取表中的数据,那么得到Worksheet对象以后再从中获取代表单元格的Cell对象

    Workbook对象

    一个Workbook对象代表一个Excel文档,因此在操作Excel之前,都应该先创建一个Workbook对象。对于创建一个新的Excel文档,直接进行Workbook类的调用即可,对于一个已经存在的Excel文档,可以使用openpyxl模块的load_workbook函数进行读取,该函数包涵多个参数,但只有filename参数为必传参数。filename 是一个文件名,也可以是一个打开的文件对象。

    >>> import openpyxl

    >>> excel = openpyxl.Workbook(‘hello.xlxs‘)

    >>> excel1 = openpyxl.load_workbook(‘abc.xlsx‘)

    >>>

    PS:Workbook和load_workbook相同,返回的都是一个Workbook对象。

    Workbook对象提供了很多属性和方法,其中,大部分方法都与sheet有关,部分属性如下:

    active:获取当前活跃的Worksheet

    worksheets:以列表的形式返回所有的Worksheet(表格)

    read_only:判断是否以read_only模式打开Excel文档

    encoding:获取文档的字符集编码

    properties:获取文档的元数据,如标题,创建者,创建日期等

    sheetnames:获取工作簿中的表(列表)

    >>> import openpyxl

    >>> excel2 = openpyxl.load_workbook(‘abc.xlsx‘)

    >>> excel2.active

    >>> excel.read_only

    False

    >>> excel2.worksheets

    [, ]

    >>> excel2.properties

    Parameters:

    creator=‘openpyxl‘, title=None, description=None, subject=None, identifier=None, language=None, created=datetime.datetime(2006, 9, 16, 0, 0), modified=datetime.datetime(2018, 2, 5, 7, 25, 18), lastModifiedBy=‘Are you SuperMan‘, category=None, contentStatus=None, version=None, revision=None, keywords=None, lastPrinted=None

    >>> excel2.encoding

    ‘utf-8‘

    >>>

    Workbook提供的方法如下:

    get_sheet_names:获取所有表格的名称(新版已经不建议使用,通过Workbook的sheetnames属性即可获取)

    get_sheet_by_name:通过表格名称获取Worksheet对象(新版也不建议使用,通过Worksheet[‘表名‘]获取)

    get_active_sheet:获取活跃的表格(新版建议通过active属性获取)

    remove_sheet:删除一个表格

    create_sheet:创建一个空的表格

    copy_worksheet:在Workbook内拷贝表格

    >>> excel2.get_sheet_names()

    Warning (from warnings module):

    File "__main__", line 1

    DeprecationWarning: Call to deprecated function get_sheet_names (Use wb.sheetnames).

    [‘abc‘, ‘def‘]

    >>> excel2.sheetnames

    [‘abc‘, ‘def‘]

    >>> excel2.get_sheet_by_name(‘def‘)

    Warning (from warnings module):

    File "__main__", line 1

    DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).

    >>> excel2[‘def‘]

    >>> excel2.get_active_sheet()

    Warning (from warnings module):

    File "__main__", line 1

    DeprecationWarning: Call to deprecated function get_active_sheet (Use the .active property).

    >>> excel2.create_sheet(‘ghk‘)

    Worksheet对象

    有了Worksheet对象以后,我们可以通过这个Worksheet对象获取表格的属性,得到单元格中的数据,修改表格中的内容。openpyxl提供了非常灵活的方式来访问表格中的单元格和数据,常用的Worksheet属性如下:

    title:表格的标题

    dimensions:表格的大小,这里的大小是指含有数据的表格的大小,即:左上角的坐标:右下角的坐标

    max_row:表格的最大行

    min_row:表格的最小行

    max_column:表格的最大列

    min_column:表格的最小列

    rows:按行获取单元格(Cell对象) - 生成器

    columns:按列获取单元格(Cell对象) - 生成器

    freeze_panes:冻结窗格

    values:按行获取表格的内容(数据) - 生成器

    PS:freeze_panes,参数比较特别,主要用于在表格较大时冻结顶部的行或左边的行。对于冻结的行,在用户滚动时,是始终可见的,可以设置为一个Cell对象或一个端元个坐标的字符串,单元格上面的行和左边的列将会冻结(单元格所在的行和列不会被冻结)。例如我们要冻结第一行那么设置A2为freeze_panes,如果要冻结第一列,freeze_panes取值为B1,如果要同时冻结第一行和第一列,那么需要设置B2为freeze_panes,freeze_panes值为none时 表示 不冻结任何列。

    常用的Worksheet方法如下:

    iter_rows:按行获取所有单元格,内置属性有(min_row,max_row,min_col,max_col)

    iter_columns:按列获取所有的单元格

    append:在表格末尾添加数据

    merged_cells:合并多个单元格

    unmerged_cells:移除合并的单元格

    >>> for row in excel2[‘金融‘].iter_rows(min_row=2,max_row=4,min_col=2,max_col=4):

    print(row)

    (, , )

    (, , )

    (, , )

    PS:从Worksheet对象的属性和方法可以看到,大部分都是返回的是一个Cell对象,一个Cell对象代表一个单元格,我们可以使用Excel坐标的方式来获取Cell对象,也可以使用Worksheet的cell方法获取Cell对象。

    >>> excel2[‘abc‘][‘A1‘]

    >>> excel2[‘abc‘].cell(row=1,column=2)

    >>>

    Cell对象

    Cell对象比较简单,常用的属性如下:

    row:单元格所在的行

    column:单元格坐在的列

    value:单元格的值

    coordinate:单元格的坐标

    >>> excel2[‘abc‘].cell(row=1,column=2).coordinate

    ‘B1‘

    >>> excel2[‘abc‘].cell(row=1,column=2).value

    ‘test‘

    >>> excel2[‘abc‘].cell(row=1,column=2).row

    1

    >>> excel2[‘abc‘].cell(row=1,column=2).column

    ‘B‘

    打印表中数据的几种方式

    # ---------- 方式1 ----------

    >>> for row in excel2[‘abc‘].rows:

    print( *[ cell.value for cell in row ])

    # ---------- 方式2 ----------

    >>> for row in excel2[‘abc‘].values:

    print(*row)

    获取最大值

    import openpyxl

    file = openpyxl.load_workbook('111.xlsx')

    info = file.worksheets[0]

    print (info.max_column) #获取最大列数

    print (info.max_row) #获取最大行数

    写入读写实例

    写入实例:

    import openpyxl

    import time

    ls = [['马坡','接入交换','192.168.1.1','G0/3','AAAA-AAAA-AAAA'],

    ['马坡','接入交换','192.168.1.2','G0/8','BBBB-BBBB-BBBB'],

    ['马坡','接入交换','192.168.1.2','G0/8','CCCC-CCCC-CCCC'],

    ['马坡','接入交换','192.168.1.2','G0/8','DDDD-DDDD-DDDD']]

    ##定义数据

    time_format = '%Y-%m-%d__%H:%M:%S'

    time_current = time.strftime(time_format)

    ##定义时间格式

    def savetoexcel(data,sheetname,wbname):

    print("写入excel:")

    wb=openpyxl.load_workbook(filename=wbname)

    ##打开excel文件

    sheet=wb.active #关联excel活动的Sheet(这里关联的是Sheet1)

    max_row = sheet.max_row #获取Sheet1中当前数据最大的行数

    row = max_row + 3 #将新数据写入最大行数+3的位置

    data_len=row+len(data) #计算当前数据长度

    for data_row in range(row,data_len): # 写入数据

    ##轮询每一行进行写入数据。

    for data_col1 in range(2,7):

    ##针对每一行下面还要进行for循环来写入列的数据

    _ =sheet.cell(row=data_row, column=1, value=str(time_current))

    ##每行第一列写入时间

    _ =sheet.cell(row=data_row,column=data_col1,value=str(data[data_row-data_len][data_col1-2]))

    #从第二列开始写入数据

    wb.save(filename=wbname) #保存数据

    print("保存成功")

    savetoexcel(ls,"Sheet1","111.xlsx")

    import openpyxl

    wb=openpyxl.load_workbook("111.xlsx")

    the_list =[]

    while True:

    info = input('请输入关键字查找:').upper().strip()

    if len(info) == 0: # 输入的关键字不能为空,否则继续循环

    continue

    count = 0

    for line1 in wb['Sheet1'].values: # 轮询列表

    if None not in line1:

    ##excel中空行的数据表示None,当这里匹配None时就不会在进行for循环,所以需要匹配非None的数据才能进行下面的for循环。

    for line2 in line1: # 由于列表中还存在元组,所以需要将元组的内容也轮询一遍

    if info in line2:

    count += 1 # 统计关键字被匹配了多少次

    print(line1) #匹配关键字后打印元组信息

    else:

    print('匹配"%s"的数量统计:%s个条目被匹配' % (info, count)) # 打印查找的关键字被匹配了多少次

    展开全文
  • openpyxl模块安装以管理员模式运行 CMD输入:pip install openpyxl稍等会自动安装如果是离线安装,需要安装以下模块请学编程的一定要收藏这个网站,以后你和他接触的机会非常多 https://pypi.org/在此网站搜索...
  • 导了一个别人写好的脚本,运行时,出现“No module named 'openpyxl'”,发现是没有openpyxl模块openpyxl模块:是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是...
  • 这篇文章主要介绍了Python openpyxl模块原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 此模块不是Python内置的模块需要安装,安装方法如下 pip...
  • 一 . Python操作EXCEL库的简介1.1 Python官方库操作excelPython官方库一般使用xlrd库来读取Excel文件...1.2 第三方库openpyxl介绍第三方库openpyxl(可读写excel表),专门处理Excel2007及以上版本产生的xlsx文件,x...
  • openpyxl模块介绍

    2018-05-16 16:59:00
    openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读取和修改Excel文档。其他很多的与Excel相关的项目基本只支持读或者...
  • 主要介绍了Python openpyxl模块实现excel读写操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • openpyxl模块 该模块是Python中处理Excel的模块(这个模块只能处理.xlsx的Excel,如果是其它格式,请先转换为.xlsx格式。)。这个模块比起其它的处理Excel的模块,在使用上会方便很多。 安装openpyxl模块 在终端下执行...
  • openpyxl模块介绍openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读取和修改Excel文档。其他很多的与Excel相关的项目...
  • openpyxl 模块简介: openpyxl 模块可以读写Excel 文件,包括xlsx、xlsm、xltx和xltm等格式 openpyxl 模块 安装 执行如下安装命令: pip install openpyxl openpyxl 模块涉及主要概念: Workbook:代表一个...
  • openPyXL模块使用

    2021-09-15 15:28:50
    1. openPyXL模块简介 openpyxl 是一个 Python 库,用于读取/写入 Excel 2010 xlsx/xlsm/xltx/xltm 文件。 2. 安装openPyXL pip install openpyxl 3.引入库 from openpyxl import * 4.打开文件 a、打开已有文件 wb...
  • 主要介绍了python 的 openpyxl模块 读取 Excel文件的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 一个简答的使用助我们使用python简单操作excel标签!!! 1.openpyxl模块简介: ...(openpyxl模块安装:pip install openpyxl即可) openpyxl是一个开源项目,openpyxl模块是一个读写Excel 2010文档的Python库,...
  • 利用openpyxl模块操作excel表 写入功能 from openpyxl import Workbook from openpyxl import load_workbook # 1.创建一个表格 wk = Workbook() # 1.1加载一个表格 wk = load_workbook(最新公司招聘信息.xlsx) # 2....
  • 1:openpyxl模块介绍 2: openpyxl模块安装 3:openpyxl模块常用操作 3.1:获取工作表 3.2:行操作 3.3:列操作 3.4:单元格操作 3.5:写excel文件,合并单元格,样式处理,设置公式等 1:openpyxl模块介绍...
  • Python openpyxl模块

    2019-11-18 15:32:45
    openpyxl模块 它是一个第三方模块 - 可以对Excle表格进行操作的模块 - Excel版本: 2003之前: excle名字.xls 2003以后: excle名字.xlsx - 清华源: https://pypi.tuna.tsinghua.edu.cn/simple - 配置永久第三...
  • openpyxl模块安装及使用

    万次阅读 多人点赞 2019-04-11 09:28:01
    openpyxl模块: 是用于解决Excel(WPS等均可使用)中扩展名为xlsx/xlsm/xltx/xltm的文件读写的第三方库。xls文件要使用xlwt 、wlrd两个模块。 主要概念: Workbooks,Sheets,Cells。Workbook就是一个excel工作簿...
  • openpyxl模块(excel操作)

    千次阅读 2019-10-04 18:55:01
    openpyxl模块(excel操作) 代码老兵关注2人评论102083人阅读2018-03-22 09:34:07 openpyxl模块介绍 openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,103
精华内容 2,441
关键字:

openpyxl模块