python3 利用xlrd模块封装实现读取表格数据
#!/usr/bin/env python
# coding=utf-8
# 封装实现读取表格数据
# 优化了xlrd中单元格的数据类型:
'''
数字一律按浮点型输出,日期输出成一串小数,布尔型输出0或1,所以我们必须在程序中做判断处理转换
成我们想要的数据类型
0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
'''
import xlrd
from xlrd import xldate_as_tuple
import datetime
class ExcelUtil:
# def __init__(self, excel_path, sheet_name):
def __init__(self, excel_path):
self.data = xlrd.open_workbook(excel_path)
# 这个可以根据传入进来的sheet表名字来获取
# self.table = self.data.sheet_by_name(sheet_name)
# 直接获取第一个sheet表
self.table = self.data.sheets()[0]
# 获取第一行作为key值
self.keys = self.table.row_values(0)
# 获取总行数
self.rowNum = self.table.nrows
# 获取总列数
self.colNum = self.table.ncols
def dict_data(self):
if self.rowNum <= 1:
print("总行数小于1")
else:
r = []
j = 1 # 第一行
for i in range(self.rowNum - 1): # 减1防止越界,从第一行开始的,不是从0行开始,所以总数减1
s = {}
# 从第二行取对应values值
values = self.table.row_values(j)
for x in range(self.colNum): # x列
# 获取单元格数据类型
c_type = self.table.cell(j, x).ctype
# 获取单元格数据
c_cell = self.table.cell_value(j,x)
if c_type == 2 and c_cell % 1 == 0: # 如果是整形
values[x] = int(values[x])
elif c_type == 3: # 日期
# 转成datetime对象
date = datetime.datetime(*xldate_as_tuple(c_cell, 0))
values[x] = date.strftime('%Y/%d/%m %H:%M:%S')
elif c_type == 4: # 布尔类型
values[x] = True if c_cell == 1 else False
s[self.keys[x]] = values[x]
r.append(s)
j += 1
return r
if __name__ == "__main__":
# excel文件路径
filePath = "./123.xlsx"
# sheet表名字传参
# sheetName = "企业在线产品列表"
# data = ExcelUtil(filePath, sheetName)
data = ExcelUtil(filePath)
# 打印最后信息
print(data.dict_data())
结果类似为:
[{'name': '欧罗', 'id1': 421.0, 'id2': 2437.0}, {'name': '欧罗', 'id1': 422.0, 'id2': 2443.0}]
xlrd详细介绍参照:https://www.cdsy.xyz/computer/programme/Python/241207/cd64837.html