python xlrd读Excel表

1 xlrd第三方库

注意:xlrd较新版本不支持读xlsx表,需安装1.2.0版本(pip install xlrd==1.2.0)或使用其他库。
xlrd库官方文档:https://xlrd.readthedocs.io/en/latest/

2 xlrd基础演示

import xlrd

# 获取工作䈬workbook对象
book = xlrd.open_workbook("Excel表.xlsx")
print("Excel文件中sheet数量:{0}".format(book.nsheets))
print("Excel文件中sheet名称列表:{0}".format(book.sheet_names()))
# 获取工作表sheet对象
sh_ = book.sheet_by_name("sheet1")  # 通过sheet名称获取
sh = book.sheet_by_index(0)         # 通过sheet索引获取
print("sheet名称:{0}  总行数:{1}  总列数:{2}".format(sh.name, sh.nrows, sh.ncols))
print("所有单元格值组成的二维列表:{0}".format(sh._cell_values))
print("------------------------单元格操作-------------------------")
print("B2单元格对象:{0}".format(sh.cell(rowx=1, colx=1)))
print("B2单元格的值:{0}".format(sh.cell_value(rowx=1, colx=1)))
print("B2单元格的值:{0}".format(sh.cell(rowx=1, colx=1).value))
print("B2单元格的格式:{0}".format(sh.cell_type(rowx=1, colx=1)))
print("B2单元格的格式:{0}".format(sh.cell(rowx=1, colx=1).ctype))
print("单元格格式映射:0-empty,1-string,2-number,3-date,4-boolean,5-error")
print("------------------------行操作-------------------------")
print("第一行所有单元格对象组成的列表:{0}".format(sh.row(rowx=0)))
print("第一行所有单元格数据组成的列表:{0}".format(sh.row_values(rowx=0)))
print("第一行中第二列至第三列单元格数据组成的列表:{0}".format(sh.row_values(rowx=0, start_colx=1, end_colx=3)))
print("------------------------列操作-------------------------")
print("第一列所有单元格对象组成的列表:{0}".format(sh.col_slice(colx=0)))
print("第一列所有单元格数据组成的列表:{0}".format(sh.col_values(colx=0)))
print("第一列中第二行至第三行单元格数据组成的列表:{0}".format(sh.col_values(colx=0, start_rowx=1, end_rowx=3)))

返回结果:

Excel文件中sheet数量:2
Excel文件中sheet名称列表:['sheet1', 'Sheet2']
sheet名称:sheet1  总行数:5  总列数:5
所有单元格值组成的二维列表:[['A-1', 'B-1', 'C-1', 'D-1', 'E-1'], ['A-2', 'B-2', 'C-2', 'D-2', 'E-2'], ['A-3', 'B-3', 'C-3', 'D-3', 'E-3'], ['A-4', 'B-4', 'C-4', 'D-4', 'E-4'], ['A-5', 'B-5', 'C-5', 'D-5', 'E-5']]
------------------------单元格操作-------------------------
B2单元格对象:text:'B-2'
B2单元格的值:B-2
B2单元格的值:B-2
B2单元格的格式:1
B2单元格的格式:1
单元格格式映射:0-empty,1-string,2-number,3-date,4-boolean,5-error
------------------------行操作-------------------------
第一行所有单元格对象组成的列表:[text:'A-1', text:'B-1', text:'C-1', text:'D-1', text:'E-1']
第一行所有单元格数据组成的列表:['A-1', 'B-1', 'C-1', 'D-1', 'E-1']
第一行中第二列至第三列单元格数据组成的列表:['B-1', 'C-1']
------------------------列操作-------------------------
第一列所有单元格对象组成的列表:[text:'A-1', text:'A-2', text:'A-3', text:'A-4', text:'A-5']
第一列所有单元格数据组成的列表:['A-1', 'A-2', 'A-3', 'A-4', 'A-5']
第一列中第二行至第三行单元格数据组成的列表:['A-2', 'A-3']

3 单元格数据类型

​ 说明:单元格有以下5种数据类型:empty,string,number,date,,boolean,error

3.1 单元格数据类型读取演示

xlrd读取效果:

 ['', 'hello', 7.0, 44295.0, 0]
  • xlrd将所有数字类型读取为浮点数:7→7.0
  • 布尔类型:FALSE→0,TRUE→1
  • date时间类型读取为长浮点数:2021年4月9日→44295.0

3.2 date类型处理

import xlrd

book = xlrd.open_workbook("Excel表.xlsx")  # 获取工作䈬对象
sh = book.sheet_by_index(1)  # 获取第二个工作表对象
date = sh.cell(0, 0).value  # 获取单元格A1的值
print("先获取A1单元格的值: {0}".format(date))
print("再通过xldate_as_datetime方法转换: {0}".format(xlrd.xldate_as_datetime(date, 0)))
print("strftime方法截取日期: {0}".format(xlrd.xldate_as_datetime(date, 0).strftime("%Y-%m-%d")))
print("xldate_as_tuple方法获取时间组成的元组: {0}".format(xlrd.xldate_as_tuple(date, 0)))

返回结果:

先获取A1单元格的值: 44295.521099537
再通过xldate_as_datetime方法转换: 2021-04-09 12:30:23
strftime方法截取日期: 2021-04-09
xldate_as_tuple方法获取时间组成的元组: (2021, 4, 9, 12, 30, 23)
posted @ 2021-12-24 10:11  强哥不强  阅读(424)  评论(0)    收藏  举报