python写excel模块_Python笔记(十四):操作excel openpyxl模块

(一)常遇到的情况

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

读取excel整个sheet页的数据。

读取指定行、列的数据

往一个空白的excel文档写数据

往一个已经有数据的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进行说明。

1312424-20180609201943428-351903375.png

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

1 importopenpyxl2

3 defget_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_row10 print("最小行索引是:", minRow)11 #包含数据的最大行索引,从1开始

12 maxRow =sheet.max_row13 print("最大行索引是:",maxRow)14 #包含数据的最小列索引

15 minColumn =sheet.min_column16 print("最小列索引是:",minColumn)17 #包含数据的最大列索引

18 maxColumn =sheet.max_column19 print("最大列索引是:", maxColumn)20 wb.close()21 get_data_openpyxl('测试.xlsx','Sheet')

1312424-20180609202343042-860809837.png

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

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

1 importopenpyxl2

3 defget_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.values10 print(data)11 #迭代输出所有数据

12 for i indata:13 print(i)14 wb.close()15 get_data_openpyxl('测试.xlsx','Sheet')

1312424-20180609202406571-1836475818.png

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

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

1 importopenpyxl2

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 incell:23 rows =[]24 for c inrow:25 rows.append(c.value)26 all_rows.append(tuple(rows))27 wb.close()28 returnall_rows29

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 inrows:33 print(i)

1312424-20180609205236904-1072459244.png

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

1 importopenpyxl2

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文档

1312424-20180609210505283-1385248100.png

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

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

1 importopenpyxl2

3 #打开excel文档

4 wb = openpyxl.load_workbook('测试写数据.xlsx')5 #访问sheet页

6 sheet = wb['Sheet']7 #获取最大行索引

8 maxRow =sheet.max_row9 x =maxRow10 for i in range(10):11 sheet['A'+str(x)] = '追加数据'

12 sheet['B'+str(x)] = '追加数据'

13 x += 1

14

15 wb.save('测试写数据.xlsx')

执行完后:

1312424-20180609211327492-914487802.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值