zoukankan      html  css  js  c++  java
  • Python笔记(十四):操作excel openpyxl模块

    (一)  常遇到的情况

            就我自己来说,常遇到的情况可能就下面几种:

    1. 读取excel整个sheet页的数据。
    2. 读取指定行、列的数据
    3. 往一个空白的excel文档写数据
    4. 往一个已经有数据的excel文档追加数据

    下面就以这几种情况为例进行说明。

    (二)  涉及的模块及函数说明

    就我知道的,有3个模块可以操作excel文档,3个模块通过pip都可以直接安装。

    xlrd:读数据

    xlwt:写数据

    openpyxl:可以读数据,也可以写数据

    这里就就只说明openpyxl了,因为这个模块能满足上面的需要了。

    openpyxl函数

    函数

    说明

    load_workbook(filename)

    打开excel,并返回所有sheet页

    访问指定sheet页的方法:

    #打开excel文档
    wb = openpyxl.load_workbook(file_name)
    #访问sheet页
    sheet = wb[‘sheet页的名称’]

    #关闭excel文档

    wb.close()

    Workbook()

     创建excel文档

    wb = openpyxl.Workbook()

    #保存excel文档

    wb.save('文件名.xlsx')

    下面的函数是针对sheet页的

    sheet = wb[‘sheet页的名称’]

    访问指定单元格的方式sheet['A1']、sheet['B1']...

    min_row

    返回包含数据的最小行索引,索引从1开始

    例如:sheet.min_row

    max_row

    返回包含数据的最大行索引,索引从1开始

    min_column

    返回包含数据的最小列索引,索引从1开始

    max_column

    返回包含数据的最大列索引,索引从1开始

    values

    获取excel文档所有的数据,返回的是一个generator对象

    iter_rows(min_row=None, max_row=None, min_col=None, max_col=None)

     

    min_row:最小行索引

    max_row:最大行索引

    min_col:最小列索引

    max_col:最大列索引

    获取指定行、列的单元格,没指定就是获取所有的

    现在我有这么一个excel,下面以这个excel进行说明。

     

    关于min_row、max_row这些,看下面的输出就很直观了

     1 import openpyxl
     2 
     3 def get_data_openpyxl(file_name,sheet):
     4     #打开excel文档
     5     wb = openpyxl.load_workbook(file_name)
     6     #访问sheet页
     7     sheet = wb[sheet]
     8     # 包含数据的最小行索引,从1开始
     9     minRow = sheet.min_row
    10     print("最小行索引是:", minRow)
    11     #包含数据的最大行索引,从1开始
    12     maxRow = sheet.max_row
    13     print("最大行索引是:",maxRow)
    14     #包含数据的最小列索引
    15     minColumn = sheet.min_column
    16     print("最小列索引是:",minColumn)
    17     #包含数据的最大列索引
    18     maxColumn = sheet.max_column
    19     print("最大列索引是:", maxColumn)
    20     wb.close()
    21 get_data_openpyxl('测试.xlsx','Sheet')

    (三)  读取excel整个sheet页的数据

    下面的代码都是没加异常处理的,要加的话自己看情况加上异常处理就行了。

     1 import openpyxl
     2 
     3 def get_data_openpyxl(file_name,sheet):
     4     #打开excel文档
     5     wb = openpyxl.load_workbook(file_name)
     6     #访问sheet页
     7     sheet = wb[sheet]
     8     # 获取excel文档所有的数据,返回的是一个generator对象
     9     data = sheet.values
    10     print(data)
    11     #迭代输出所有数据
    12     for i in data:
    13         print(i)
    14     wb.close()
    15 get_data_openpyxl('测试.xlsx','Sheet')

     

    (四)  读取指定行、列的数据

    这里有个问题就是,openpyxl模块貌似没有读取指定行、列数据的函数,不过没关系,自己封装一个函数去实现就行了,这个是通用的(前提是已经安装openpyxl),可以创建一个类(可以根据函数的作用创建多个不同的类,这个看自己了),放一些自己写的常用函数。

     1 import openpyxl
     2 
     3 def get_data_iter(file_name,sheet, max_row=None,min_row=None,max_col=None,min_col=None):
     4     '''
     5 
     6     :param file_name: excel文件名称
     7     :param sheet: sheet页名称
     8     :param max_row:最大行索引,未指定则获取所有行的数据
     9     :param min_row: 最小行索引,未指定则从第一行开始
    10     :param min_col:最小列索引,未指定则从第一列开始
    11     :param max_col:最大列索引,未指定则获取所有列的数据
    12     :return:返回指定行、列的数据
    13     '''
    14     # 打开excel文档
    15     wb = openpyxl.load_workbook(file_name)
    16     # 访问sheet页
    17     sheet = wb[sheet]
    18     # 获得指定行列的单元格
    19     cell = sheet.iter_rows(max_row=max_row, min_row=min_row, max_col=max_col, min_col=min_col)
    20     all_rows = []
    21     # 获取单元格的值
    22     for row in cell:
    23         rows = []
    24         for c in row:
    25             rows.append(c.value)
    26         all_rows.append(tuple(rows))
    27     wb.close()
    28     return all_rows
    29 
    30 rows = get_data_iter('测试.xlsx','Sheet',max_row=10,min_row=5,max_col=3,min_col=1)
    31 print(rows)
    32 for i in rows:
    33     print(i)

    (五)  往空白的excel文档写数据

     1 import openpyxl
     2 
     3 #创建excel文档
     4 wb =openpyxl.Workbook()
     5 sheet = wb['Sheet']
     6 sheet['A1'] = '颜色'
     7 sheet['B1'] = '版本'
     8 x = 2
     9 for i in range(10):
    10     sheet['A'+str(x)] = i+1
    11     sheet['B'+str(x)] = i+1
    12     x += 1
    13 
    14 wb.save('测试写数据.xlsx')

    执行后,可以在当前工作目录下看到这个excel文档

    (六)  往一个已经有数据的excel文档追加数据

    要追加数据的话,获取已经有数据的最大索引就行了,从下一行开始添加数据,这里X的初始值忘记加1了,代码就不修改了,能看明白就行了

     1 import openpyxl
     2 
     3 # 打开excel文档
     4 wb = openpyxl.load_workbook('测试写数据.xlsx')
     5 # 访问sheet页
     6 sheet = wb['Sheet']
     7 #获取最大行索引
     8 maxRow = sheet.max_row
     9 x = maxRow
    10 for i in range(10):
    11     sheet['A'+str(x)] = '追加数据'
    12     sheet['B'+str(x)] = '追加数据'
    13     x += 1
    14 
    15 wb.save('测试写数据.xlsx')

    执行完后:

  • 相关阅读:
    在SplendidCRM中添加用户控件
    SPendidCRM:给HK的ImageInfoEntryEditView增加一个checkbox,用于判断特殊类型的PODS记录
    html button 跳转ASP.NET页面跳转技术总结
    让<li>不显示超出内容,显示... (编程方法和CSS方法)
    SplendidCRM Popup.aspx的hyperlink字段配置的易错点
    asp.net 个别页面URL参数出现中文乱码的解决方法
    解决:工具箱里边没了Dev控件
    DevControlgridview的属性说明 (转)
    DevControlgridview的属性说明 (转)
    VM如何设置U盘启动
  • 原文地址:https://www.cnblogs.com/simple-free/p/9160685.html
Copyright © 2011-2022 走看看