一、安装 xlrd 模块
- 到 python 官网下载 http://pypi.python.org/pypi/xlrd 模块安装,前提是已经安装了 python 环境。
- 或者在 cmd 窗口 pip install xlrd
二、excel 读取操作
1.常用的函数
- excel 中最重要的方法就是 book 和 sheet 的操作
1)获取 book 中一个工作表
#coding=utf-8 import xlrd data = xlrd.open_workbook("d:\test.xls") #打开excel文件 print (data.sheets()[0]) #通过索引顺序获取sheet对象 print (data.sheet_by_index(0)) #通过索引顺序获取sheet对象 print (data.sheet_by_name("Sheet1")) #通过名称获取sheet对象 print (data.sheet_names()) #返回book中所有工作表的名字 #结果如下 --> <xlrd.sheet.Sheet object at 0x0000000003D969B0> --> <xlrd.sheet.Sheet object at 0x0000000003D969B0> --> <xlrd.sheet.Sheet object at 0x0000000003D969B0> --> [u'Sheet1', u'Sheet2', u'Sheet3']
#coding=utf-8 import xlrd book = xlrd.open_workbook("C:\Users\Administrator\Desktop\aaa.xls") sheet = book.sheets()[0] #通过for循环遍历取出excel表中第一列所有的数据 for i in range(sheet.nrows): print (sheet.row_values(i)[0])
2)行的操作
- nrows #获取该 sheet 中的有效行数
- row(row_index) #返回由该行中所有的单元格对象组成的列表
- row_slice(row_index, start_colx=0, end_colx=None) #默认返回由该行中所有的单元格对象组成的列表(结果只能返回 end_colx 前值)
- row_values(row_index, start_colx=0, end_colx=None) #默认返回由该行中所有单元格的数据组成的列表(结果只能返回 end_colx 前值)
- row_len(index) #返回该行的有效单元格长度
#coding=utf-8 import xlrd data = xlrd.open_workbook("d:\test.xls") sheet = data.sheets()[0] print (sheet.nrows) #获取该sheet中的有效行数 print (sheet.row(0)) #返回由该行中所有的单元格对象组成的列表 print (sheet.row_slice(0)) #默认返回由该行中所有的单元格对象组成的列表 print (sheet.row_values(0,1)) #默认返回由该行中所有单元格的数据组成的列表 print (sheet.row_len(0)) #索引值为0的行中有效单元格有几个 #结果如下 --> 10 --> [text:u'user1', text:u'pwd1'] --> [text:u'user1', text:u'pwd1'] --> [u'pwd1'] --> 2
3)列(colnum)的操作
- ncols #获取列表的有效列数
- col(col_index, start_rowx=0, end_rowx=None) #默认返回由该列中所有的单元格对象组成的列表(结果只能返回 end_rowx 前值)
- col_slice(col_index, start_rowx=0, end_rowx=None) #默认返回由该列中所有的单元格对象组成的列表(结果只能返回 end_rowx 前值)
- col_values(col_index, start_rowx=0, end_rowx=None) #默认返回由该列中所有单元格的数据组成的列表(结果只能返回 end_rowx 前值)
#coding=utf-8 import xlrd data = xlrd.open_workbook("d:\test.xls") sheet = data.sheets()[0] print (sheet.ncols) #获取列表的有效列数 print (sheet.col(0,0,2)) #返回第一行和第二行的单元格对象组成的列表 print (sheet.col_slice(0,0,2)) #返回第一行和第二行的单元格对象组成的列表 print (sheet.col_values(0,0,2)) #返回第一行和第二行的单元格数据组成的列表 #结果如下 --> 2 --> [text:u'user1', text:u'user2'] --> [text:u'user1', text:u'user2'] --> [u'user1', u'user2']
4)单元格的操作
- cell(row_index,col_index) #返回单元格对象
- cell_value(row_index,col_index) #返回单元格中的数据
#coding=utf-8 import xlrd data = xlrd.open_workbook("d:\test.xls") sheet = data.sheets()[0] print (sheet.cell(0,0)) #返回第一行第一列单元格对象 print (sheet.cell_value(0,0)) #返回第一行第一列单元格中的数据 #结果如下 --> text:u'user1' --> user1
5)读取 excel 方法封装
#coding=utf-8 import xlrd class ReadExcel(): def __init__(self,file,sheet_i): self.book = xlrd.open_workbook(file) self.sheet = self.book.sheet_by_index(sheet_i) def getValue(self,row_i,col_i): """ 获取excel单元格数据 """ return self.sheet.cell_value(row_i,col_i) def getRows(self): """ 获取有效行数 """ return self.sheet.nrows def getCols(self): """ 获取有效列数 """ return self.sheet.ncols
2.单元格是表格中行与列的交叉部分,它是组成表格的最小单位,可拆分或者合并。单个数据的输入和修改都是在单元格中进行的如:
注意:注意作用域问题,之前获取的 sheet 之后,都在获取到这个 sheet 值后,在进行,行和列以及单元格的操作。
问题现象:
- 使用 open() 函数、xlrd.open_workbook() 函数打开文件,文件名若包含中文,会报错找不到这个文件或目录。
- 获取 sheet 时若包含中文,也会报错。
#打开文件 file = open(filename,'rb') #打开excel文件 workbook = xlrd.open_workbook(filename) #获取sheet sheet = workbook.sheet_by_name(sheetname)
解决方案:
- 对参数进行转码即可。如:
filename = filename.decode('utf-8')
- 也试过 unicode 函数,不过,在 ride 中运行时出现了报错,所以不赞成使用
filename = unicode(filename,'utf-8')