失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python编程之读取Excel xlsx格式带合并单元格的文件

Python编程之读取Excel xlsx格式带合并单元格的文件

时间:2019-08-04 02:54:34

相关推荐

Python编程之读取Excel xlsx格式带合并单元格的文件

1、文件内容

2、代码实现

import xlrdapply_dic = []def get_excel():with xlrd.open_workbook(r'kecheng.xlsx') as workbook:name_sheets = workbook.sheet_names() # 获取Excel的sheet表列表,存储是sheet表名for index in name_sheets: # for 循环读取每一个sheet表的内容sheet_info = workbook.sheet_by_name(index) # 根据表名获取表中的所有内容,sheet_info也是列表,列表中的值是每个单元格里值first_line = sheet_info.row_values(0) # 获取首行,我这里的首行是表头,我打算用表头作为字典的key,每一行数据对应表头的value,每一行组成一个字典values_merge_cell = merge_cell(sheet_info) # 这里是调用处理合并单元格的函数for i in range(1, sheet_info.nrows): # 开始为组成字典准备数据other_line = sheet_info.row_values(i)for key in values_merge_cell.keys():if key[0] == i:other_line[key[1]] = values_merge_cell[key]# print(other_line)dic = list_dic(first_line, other_line) # 调用组合字典的函数,传入key和value,字典生成apply_dic.append(dic)return apply_dicdef list_dic(list1, list2):'''two lists merge a dict,a list as key,other list as value:param list1:key:param list2:value:return:dict'''dic = dict(map(lambda x, y: [x, y], list1, list2))return dicdef merge_cell(sheet_info):'''#handle Merge transverse cells and handle Merge Vertical Cells, assign empty cells,:param rlow:row, include row exclusive of row_range:param rhigh:row_range:param clow:col, include col exclusive of col_range:param chigh:col_range:param sheet_info:object of sheet:return:dic contain all of empty cells value'''merge = {}merge_cells = sheet_info.merged_cellsfor (rlow, rhigh, clow, chigh) in merge_cells:value_mg_cell = sheet_info.cell_value(rlow, clow)if rhigh - rlow == 1:# Merge transverse cellsfor n in range(chigh - clow - 1):merge[(rlow, clow + n + 1)] = value_mg_cellelif chigh - clow == 1:# Merge Vertical Cellsfor n in range(rhigh - rlow - 1):merge[(rlow + n + 1, clow)] = value_mg_cellreturn mergeif __name__ == '__main__':get_excel()for i in apply_dic:print(i)

3、输出结果:

以字典的形式输出,合并的单元格被填充

如果觉得《Python编程之读取Excel xlsx格式带合并单元格的文件》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。