前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python笔记(十四):操作excel openpyxl模块

Python笔记(十四):操作excel openpyxl模块

作者头像
free赖权华
发布2018-07-04 15:36:04
2.6K0
发布2018-07-04 15:36:04
举报
文章被收录于专栏:赖权华的笔记赖权华的笔记

(一)  常遇到的情况

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

  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这些,看下面的输出就很直观了

代码语言:javascript
复制
 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页的数据

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

代码语言:javascript
复制
 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),可以创建一个类(可以根据函数的作用创建多个不同的类,这个看自己了),放一些自己写的常用函数。

代码语言:javascript
复制
 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文档写数据

代码语言:javascript
复制
 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了,代码就不修改了,能看明白就行了

代码语言:javascript
复制
 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')

执行完后:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-06-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档