当前位置:   article > 正文

python进阶-xlrd读excel_xlrd读取xlsm

xlrd读取xlsm

原文链接:http://www.juzicode.com/archives/4557

[注] xlrd2.0以后版本只支持xls格式的excel表格,不再支持xlsx格式

xlrd可以用来读excel表格,xlwt用来写excel表格,二者都不是标准库,需要安装。

pip install xlrd,xlwt

今天先介绍xlrd,我们先创建一个xls格式的文件,文件包含了3个sheet,内容是下面2张图片这样的,其中Sheet3是个空表:

excel文件的结构:file文件–sheet表–cell单元格,所以excel文件的访问步骤也就分为:第1步先是访问excel文件本身,第2步对excel文件中的sheet进行操作,第3步才是对sheet中的cell操作。

1、打开文件

首先使用open_workbook()打开文件,创建一个wb实例。

  1. import xlrd
  2. wb = xlrd.open_workbook("xlrd-test.xls")

运行结果:

wb: <xlrd.book.Book object at 0x0000018198BCF0D0>

 

2、sheet方法、属性

利用前面获取的wb实例,可以获取sheet相关属性或对象:

  • 获取sheet的数量:wb.nsheets
  • 获取sheet的名字,得到一个list:wb.sheet_names()
  • 获取所有sheet对象:wb.sheets()
  • sheet名称查找sheet对象:wb.sheet_by_name(“test”)
  • sheet编号查找sheet对象:wb.sheet_by_index(1)
  1. print('-----欢迎来到www.juzicode.com')
  2. print('-----VX公众号: 桔子code或juzicode \n')
  3. import xlrd
  4. wb = xlrd.open_workbook("xlrd-test.xls")
  5. print('wb:',wb)
  6. #获取表(sheet)的数量
  7. sheet_count= wb.nsheets
  8. print('sheet_count:',sheet_count)
  9. #获取所有表的名称
  10. sheet_names=wb.sheet_names()
  11. print('sheet_names:',sheet_names)
  12. #获取所有表对象
  13. sheet_objs = wb.sheets()
  14. print('sheet_objs:',sheet_objs)
  15. #获取单个表格对象
  16. obj = wb.sheet_by_name("Sheet1")
  17. print('Sheet1 obj:',obj)
  18. obj = wb.sheet_by_index(1)
  19. print('index=1 obj:',obj)

运行结果:

  1. -----欢迎来到www.juzicode.com
  2. -----VX公众号: 桔子code或juzicode
  3. wb: <xlrd.book.Book object at 0x000001C9D5BCF0D0>
  4. sheet_count: 3
  5. sheet_names: ['Sheet1', 'Sheet2', 'Sheet3']
  6. sheet_objs: [Sheet 0:<Sheet1>, Sheet 1:<Sheet2>, Sheet 2:<Sheet3>]
  7. Sheet1 obj: Sheet 0:<Sheet1>
  8. index=1 obj: Sheet 1:<Sheet2>

 

利用sheet对象获取单个sheet的名称name,行nrows、列数ncols,下面这个例子遍历上述例子中的sheet_objs:

  1. for sheet_obj in sheet_objs:
  2. print('sheet_obj.name:',sheet_obj.name)
  3. print('sheet_obj.nrows:',sheet_obj.nrows)
  4. print('sheet_obj.ncols:',sheet_obj.ncols)

运行结果:

  1. sheet_obj.name: Sheet1
  2. sheet_obj.nrows: 6
  3. sheet_obj.ncols: 3
  4. sheet_obj.name: Sheet2
  5. sheet_obj.nrows: 6
  6. sheet_obj.ncols: 2
  7. sheet_obj.name: Sheet3
  8. sheet_obj.nrows: 0
  9. sheet_obj.ncols: 0

 

3、cell方法、属性

3.1、操作行列

通过row_values(行号,起始列,终止列)获取某行的值,其中不包含终止列,左闭右开区间。

通过col_values(列号,起始行,终止行)获取某列的值,其中不包含终止行,左闭右开区间。

  1. row_values = sheet_obj.row_values(0, 1, 3) # 第0行,第1~3列(不含第3表)
  2. print('row_values:',row_values)
  3. col_values = sheet_obj.col_values(1, 0, 5) # 第1列,第0~5行(不含第5行)
  4. print('col_values:',col_values)

运行结果:

  1. row_values: ['重量', '价格']
  2. col_values: ['重量', 100.0, 200.0, 300.0, 500.0]

 

3.2、操作cell

使用cell的坐标位置(x,y)访问特定cell,cell的行列编号是从0开始的,最左上角为(0,0)。

1) 、获取cell值:
sheet_obj.cell_value(1, 2)
sheet_obj.cell(1, 2).value
sheet_obj.row(1)[2].value
sheet_obj.col(2)[1].value
2)、 获取cell类型:
sheet_obj.cell(1, 2).ctype
sheet_obj.cell_type(1, 2)
sheet_obj.row(1)[2].ctype
sheet_obj.col(2)[1].ctype

  1. print('访问cell(0,0)')
  2. cell_type = sheet_obj.cell_type(0,0)
  3. print('cell_type:',cell_type)
  4. cell_value = sheet_obj.cell_value(0,0)
  5. print('cell_value:',cell_value)
  6. print('type(cell_value):',type(cell_value))
  7. print('访问cell(1,1)')
  8. cell_type = sheet_obj.cell_type(1,1)
  9. print('cell_type:',cell_type)
  10. cell_value = sheet_obj.cell_value(1,1)
  11. print('cell_value:',cell_value)
  12. print('type(cell_value):',type(cell_value))

运行结果:

  1. cell_type: 2
  2. cell(1, 2).ctype: 2
  3. row(1)[2].ctype: 2
  4. col(2)[1].ctype: 2
  5. type(cell_value): <class 'float'>
  6. cell_value: 3.5
  7. cell(1, 2).value: 3.5
  8. row(1)[2].value : 3.5
  9. col(2)[1].value: 3.5

从上面的例子看读出cell的ctype为2,对应的Python类型为float,

ctype和Python内置数据类型对比:

  1. #类型对比:
  2. cell_type = sheet_obj.cell_type(0,0)
  3. print('cell_type(0,0):',cell_type)
  4. cell_value = sheet_obj.cell_value(0,0)
  5. print('type(cell_value(0,0)):',type(cell_value))
  6. cell_type = sheet_obj.cell_type(1,2)
  7. print('cell_type(1,2):',cell_type)
  8. cell_value = sheet_obj.cell_value(1,2)
  9. print('type(cell_value(1,2)):',type(cell_value))

运行结果显示,ctype=1对应str,ctype=2对应float:

  1. cell_type(0,0): 1
  2. type(cell_value): <class 'str'>
  3. cell_type(1,2): 2
  4. type(cell_value): <class 'float'>

 

扩展阅读:

  1.  https://xlrd.readthedocs.io/en/stable/changes.html xlrd版本变更
  2.  http://www.python-excel.org/ 更多的excel表格python库
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/732189
推荐阅读
相关标签
  

闽ICP备14008679号