您当前的位置:首页 > 计算机 > 编程开发 > Python

Python操作Excel读写--xlrd模块

时间:04-18来源:作者:点击数:

xlrd模块实现对excel文件内容读取 支持xls和xlsx格式 (最新版好像不支持xlsx)

1、以下表来举例说明 [0,0]

2、安装并导入xlrd模块

在PyCharm终端输入: pip install xlrd

导入:import xlrd

3、打开Excel文件返回数据

wb = xlrd.open_workbook(r'C:\Users\Administrator\Desktop\测试一下.xlsx')

4、通过以下3种方法获取工作表

table = wb.sheets()[0] # 通过索引顺序获取

table = wb.sheet_by_index(0) # 通过索引顺序获取

table = wb.sheet_by_name(u'表1') # 通过名称获取

tables = wb.sheet_names() # 以列表形式返回wb所有的表 ['表1', '表2', '表3']

5、获取table中的有效行数

row = table.nrows

print(row) # 6

6、获取table中的有效列数

col = table.ncols

print(col) # 5

7、获取一行中有多少列数据

num = table.row_len(0)

print(num) # 5

8、获取整行的值(数组)

v = table.row_values(0) # ['NAME', 'AGE', 'NO', 'TEL', 'COUNTRY']

v = table.row_values(1) # ['Lilei', 20.0, 'A00001', 13800138001.0, 'China']

9、获取整列的值(数组)

v = table.col_values(0) # ['学号', 'B00001', 'B00002', 'B00003', 'B00004', 'B00005', 'B00006', 'B00007']

v = table.col_values(1) # ['姓名', '张1', '张2', '张3', '张4', '张5', '张6', '张7']

10、循环行列表数据

for i in range(row):
    print(table.row_values(i))

['NAME', 'AGE', 'NO', 'TEL', 'COUNTRY']

['Lilei', 20.0, 'A00001', 13800138001.0, 'China']

['Hanmeimei', 18.0, 'A00002', 13800138002.0, 'Americe']

['Jony', 21.0, 'A00003', 13800138003.0, 'Japan']

['Herry', 25.0, 'A00004', 13800138004.0, 'Aussie']

['NoNy', 27.0, 'A00005', 13800138005.0, 'Italy']

11、读取指定单元格的值

cell = table.cell(0,4).value # COUNTRY

cell = table.cell(3,2).value # A00003

cell = table.cell_value(rowx=3,colx=4) # Japan

12、使用行列索引读取具体单元格的值

cell = table.row(0)[0].value # NAME

cell = table.row(1)[2].value # A00001

13、获取单元格的数据类型

python读取excel中单元格的内容返回的有5种类型。ctype: 0 empty, 1 string, 2 number, 3 date, 4 boolean, 5 error

value = table.cell_type(rowx=0, colx=1) # 1

14、以键值对形势读取表单信息

点击查看代码
import xlrd
from xlrd import xldate_as_tuple
import datetime
'''
xlrd中单元格的数据类型
数字一律按浮点型输出,日期输出成一串小数,布尔型输出0或1,所以我们必须在程序中做判断处理转换
成我们想要的数据类型
0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
'''
class ExcelData():
    def __init__(self):
        self.wb = xlrd.open_workbook(r'C:\Users\Administrator\Desktop\测试一下.xlsx')
        self.table2 = self.wb.sheet_by_name('表2')
        self.keys = self.table2.row_values(0)

        self.rowNum = self.table2.nrows
        self.colNum = self.table2.ncols

    def readExcel(self):

        datas = []
        for i in range(1, self.rowNum):
            sheet_data = {}
            for j in range(self.colNum):
                # 获取单元格数据类型
                c_type = self.table2.cell(i,j).ctype
                # 获取单元格数据
                c_cell = self.table2.cell_value(i, j)
                if c_type == 2 and c_cell % 1 == 0:  # 如果是整形
                    c_cell = int(c_cell)
                elif c_type == 3:
                    # 转成datetime对象
                    date = datetime.datetime(*xldate_as_tuple(c_cell,0))
                    c_cell = date.strftime('%Y/%d/%m %H:%M:%S')
                elif c_type == 4:
                    c_cell = True if c_cell == 1 else False

                sheet_data[self.keys[j]] = c_cell
            datas.append(sheet_data)
        return datas

if __name__ == "__main__":
    get_data = ExcelData()
    datas = get_data.readExcel()
    print(datas)

执行结果:

[

{'学号': 'B00001', '姓名': '张1', '年龄': 18, '专业': '语文', '考试时间': '2019/18/06 00:00:00'},

{'学号': 'B00002', '姓名': '张2', '年龄': 19, '专业': '数学', '考试时间': '2019/19/06 00:00:00'},

{'学号': 'B00003', '姓名': '张3', '年龄': 20, '专业': '英语', '考试时间': '2019/20/06 00:00:00'},

{'学号': 'B00004', '姓名': '张4', '年龄': 21, '专业': '物理', '考试时间': '2019/21/06 00:00:00'},

{'学号': 'B00005', '姓名': '张5', '年龄': 22, '专业': '化学', '考试时间': '2019/22/06 00:00:00'},

{'学号': 'B00006', '姓名': '张6', '年龄': 23, '专业': '生物', '考试时间': '2019/23/06 00:00:00'},

{'学号': 'B00007', '姓名': '张7', '年龄': 24, '专业': '历史', '考试时间': '2019/24/06 00:00:00'}

]

总结:

在执行时如果提示 xlrd.biffh.XLRDError: Excel xlsx file; not supported

说明 xlrd更新到了2.0.1版本,只支持.xls文件

可以安装旧版xlrd

pip uninstall xlrd

pip install xlrd==1.2.0

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门