| import xlrd from datetime import date def read_excel(): """读取excel""" # 打开文件 work_book = xlrd.open_workbook('read_test.xlsx') # 获取所有sheet sheet_names = work_book.sheet_names() # 根据sheet索引或者名称获取sheet内容 for index, sheet_name in enumerate(sheet_names): # 根据名字 sheet = work_book.sheet_by_name(sheet_name) # 根据索引 sheet = work_book.sheet_by_index(index) # 获取sheet的名称,行数,列数 name = sheet.name # 名称 nrows = sheet.nrows # 行数 ncols = sheet.ncols # 列数 print(name, nrows, ncols) # 获取整行或整列数据 # for i in range(nrows): # nrow_data = sheet.row_values(i) # print(nrow_data) # # for i in range(ncols): # ncols_data = sheet.col_values(i) # print(ncols_data) # 获取指定单元格的内容 data = sheet.cell(0, 1).value data = sheet.cell_value(0, 1) data = sheet.row(0)[1].value data = sheet.col(1)[0].value print(data) # 获取指定单元格的数据类型 # 说明:ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error data_type = sheet.cell(0, 1).ctype # 值为1 表示string print(data_type) # 获取日期类型的数据 data_date = sheet.cell(2, 0).ctype print(data_date) if sheet.cell(1, 0).ctype == 3: date_value = xlrd.xldate_as_tuple(sheet.cell_value(1, 0), work_book.datemode) print(date_value) date_tmp = date(*date_value[:3]).strftime('%Y/%m/%d') # 处理为日期格式 print(date_tmp) # 读取合并单元格的内容 第二行 第十列和第十一列是合并单元格 data_merge10 = sheet.cell_value(1, 9) # 第十列 获取到值 data_merge11 = sheet.cell_value(1, 10) # 第十一列 没有值 print(data_merge10, data_merge11) # 从以上结果可以看出来,第2行的第10和第11列是合并单元格,但这里我们只获取到第2行第10列的值而第11列获取的内容为空,理论上来说合并的单元格内容应该是一样的,但是现在只有合并的第一个单元格可以获取到值,其他为空,如何处理? print(sheet.merged_cells) # merged_cells属性是返回sheet的所有合并的单元格,[(1, 2, 9, 11), (1, 3, 11, 12)],列表中的每一个元素表示合并的单元格, # 每一个元组有4个元素,前两个表示单元格占的行数(含前不含后),后两个参数表示占的列数(含前不含后) 注意:行列下标从0开始 # (1, 2, 9, 11) 表示 第2行 的 第10列、11列为合并的单元格 # (1, 3, 11, 12) 表示 第12列 的 第2、第3行表示合并单元格 # 获取所有合并的单元格 merge = [] for (rlow, rhigh, clow, chigh) in sheet.merged_cells: merge.append((rlow, clow)) for i in merge: print(sheet.cell_value(i[0], i[1])) if __name__ == '__main__': read_excel() |