做自动化时需要从excel读取数据; 本文实现将excel文件数据读取为json格式,方便自动化调用
读取xls文件
使用xlrd读取xls文件代码:
1import xlrd 2 3 4def read_xls(file): 5 # 实例化excel 6 book = xlrd.open_workbook(file) 7 # 下标读取sheet 8 sheet = book.sheet_by_index(1) 9 # sheet name读取sheet 10 # sheet = book.sheet_by_name('Sheet1') 11 # 获取总行数 12 nrows = sheet.nrows 13 # 循环读取每行数据 14 datas = [] 15 for i in range(1, nrows): 16 # print(sheet.row_values(i)) 17 # 数据组装dic+t格式 18 data = dict(zip(sheet.row_values(0), sheet.row_values(i))) 19 datas.append(data) 20 return datas
读取xlsx文件
因为xlrd只能读取xls,如遇到xlsx文件,需要使用openpyxl库读取,代码如下:
1from openpyxl import load_workbook 2def read_xlsx(file): 3 # 加载文件 4 book = load_workbook(file) 5 # sheet name获取sheet: 6 sheet = book['sheet1'] 7 # 获取总行数 8 rows = sheet.max_row 9 # 获取总列数 10 # cols = sheet.max_column 11 # print(rows) 12 # 获取表头 13 head = [row for row in sheet.iter_rows(min_row=1, max_row=1, values_only=True)][0] 14 # 数据组装 15 datas = [] 16 for row in sheet.iter_rows(min_row=2, max_row=rows + 1, values_only=True): 17 data = dict(zip(head, row)) 18 datas.append(data) 19 # print(datas) 20 return datas
判断文件类型方法
最后根据文件后缀自动选择对应方法读取
1def read_excel(file: str): 2 if file.endswith('xls'): 3 data = read_xls(file) 4 elif file.endswith('xlsx'): 5 data = read_xlsx(file) 6 else: 7 data = ['not support file'] 8 return data
最终代码
1import xlrd 2from openpyxl import load_workbook 3 4 5def read_xls(file): 6 # 实例化excel 7 book = xlrd.open_workbook(file) 8 # 下标读取sheet 9 sheet = book.sheet_by_index(1) 10 # sheet name读取sheet 11 # sheet = book.sheet_by_name('Sheet1') 12 # 获取总行数 13 nrows = sheet.nrows 14 # 循环读取每行数据 15 datas = [] 16 for i in range(1, nrows): 17 # print(sheet.row_values(i)) 18 # 数据组装dic+t格式 19 data = dict(zip(sheet.row_values(0), sheet.row_values(i))) 20 datas.append(data) 21 return datas 22 23 24def read_xlsx(file): 25 # 加载文件 26 book = load_workbook(file) 27 # sheet name获取sheet: 28 sheet = book['sheet1'] 29 # 获取总行数 30 rows = sheet.max_row 31 # 获取总列数 32 # cols = sheet.max_column 33 # print(rows) 34 # 获取表头 35 head = [row for row in sheet.iter_rows(min_row=1, max_row=1, values_only=True)][0] 36 # 数据组装 37 datas = [] 38 for row in sheet.iter_rows(min_row=2, max_row=rows + 1, values_only=True): 39 data = dict(zip(head, row)) 40 datas.append(data) 41 # print(datas) 42 return datas 43 # 获取单元格值: 44 # Data = sheet.cell(row=row, column=col).value # 获取表格内容,是从第一行第一列是从1开始的,注意不要丢掉 .value 45 46 47def read_excel(file: str): 48 if file.endswith('xls'): 49 data = read_xls(file) 50 elif file.endswith('xlsx'): 51 data = read_xlsx(file) 52 else: 53 data = ['not support file'] 54 return data
