Python操作Excel读写--xlrd模块

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

posted @   爱晚亭的那一片枫叶林  阅读(884)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示