1. 模块导入
import xlrd
xlrd模块,使用前需要先安装:pip install xlrd
若使用 pip 安装时,提示:无法查找到,则先下载package到本地,放置在python27\Lib\site-packages 路径下
2. 打开excel
filename = r'F:\test\安排时间表.xlsx'
filename=filename.decode('utf-8')# 对参数转码
data = xlrd.open_workbook(filename)#文件名以及路径
# 若路径或文件名中有中文,则添加r
xlrd.open_work(filepath or filename ) 返回值: xlrd.book.Book类型
使用filename.decode('utf-8') 对参数转码,解决IOError: [Errno 2] No such file or directory
注:excel表格扩展名不可省略,否则会报错
3. sheet操作
sheet_index=0 # 索引
table1 = data.sheets()[sheet_index] #通过索引顺序获取,返回xlrd.sheet.sheet()对象
table2 = data.sheet_by_index(sheet_index) # 通过索引顺序获取,返回xlrd.sheet.sheet()对象
sheet_name="Sheet1"
table3 = data.sheet_by_name(sheet_name) # 通过sheet的名称获取,返回xlrd.sheet.sheet()对象
names = data.sheet_names() #返回book中所有工作表的名字,list类型
print "names : ",names
print data.sheet_loaded(sheet_name) # 检查某个sheet是否导入完毕
print data.sheet_loaded(sheet_index)
注:我个人偏好使用 sheet_name,因个人习惯不常改变name,但会移动排序
4. 行操作
nrows = table1.nrows # 获取该sheet中的有效行数
print "\nThe number of sheet1\'s row is ",nrows
rowx = 520
# print table1.row(rowx) # 返回由该行中所有单元格对象组成的列表
# 处理list中的中文乱码
t = str(table1.row(rowx)).replace('u\'','\'')
print t.decode('unicode-escape')
rowSlice = table1.row_slice(rowx) # 同row()
# 处理list中的中文乱码
t = str(rowSlice).replace('u\'','\'')
print "\n===rowSlice=== \n", t.decode('unicode-escape')
print "\n===rowTypes=== \n",table1.row_types(rowx,start_colx=0,end_colx=None)
# rowx行,第start_clox~end_colx列的单元格对象的数据类型组成的列表
# 结果??array('B', [3, 1, 1, 0, 1, 1, 1])
# 1对应str和text,3对应Number,0对应空,即无值
rowValue = table1.row_values(rowx,start_colx=0,end_colx=None)
# rowx行,第start_clox~end_colx列的单元格对象的数值组成的列表
# 处理list中的中文乱码
t = str(rowValue).replace('u\'','\'')
print "\n===rowValue=== \n", t.decode('unicode-escape')
print "rowLen: ",table1.row_len(rowx) #返回单元格的有效单元格长度,即有效列数
5. 列操作
ncols = table2.ncols # 获取列表的有效列数
print "ncols = ",ncols
colx = 0
colList = table2.col(colx,start_rowx=0,end_rowx=10)
colList = str(colList).replace('u\'','\'')
colList = colList.decode('unicode-escape')
print "col(",colx,",start_rowx=0,end_rowx=10) = ",colList
colType = table2.col_types(colx,start_rowx=0,end_rowx=10)
print "colType = ",colType
colValue = table2.col_values(colx,start_rowx=0,end_rowx=10)
colValue = str(colValue).replace('u\'','\'')
colValue = colValue.decode('unicode-escape')
print "col_values(",colx,",start_rowx=0,end_rowx=10) = ",colValue
# colLen = table2.col_len(colx) #AttributeError: 'Sheet' object has no attribute 'col_len'
6. 单元格操作
cell = table3.cell(rowx,colx) #返回单元格对象
# cell = str(cell).replace('u\'','\'')
# cell = cell.decode('unicode-escape')
# xlrd.xlrdate_as_tuple(cell,date.date) xldate如何正常显示
print "cell(",rowx,",",colx,") = ",cell
print type(cell)
cellType = table3.cell_type(rowx,colx) #返回单元格对应的数据类型
print "cellType = ",cellType
print type(cellType)
cellValue = table3.cell_value(rowx,colx) # 返回单元格对象对应的数据
print "cellValue = ",cellValue
print type(cellValue)
7. 常用单元格中的数据类型
0 empty(空的)、1-String(text)、2-number、3-date、4-boolean、5-error、6-blank(空白表格)
查看数据类型:cell_type()、row_types()、col_types()