适合单表头和多级表头,注意关键词判断

from openpyxl import load_workbook
from openpyxl.cell import MergedCell
from openpyxl.utils import get_column_letter
from openpyxl.worksheet.merge import MergedCellRangefile = "工资表_双层表头.xlsx"
file="2022年1月工资表.xlsx"
file="工资表_单层表头.xlsx"
#path="/root/PycharmProjects1/python/excel/{}".format(file)
book = load_workbook(file)
ws = book.activedef get_header():# df = pd.read_excel(file, header=[0, 1], engine='openpyxl')# header = df.columns.to_list()# print(header)# return# df.loc[1].to_csv('test.csv')row1 = ws[1]row2 = ws[2]merged_cells = ws.merged_cells.rangesletters = []for i in range(1, ws.max_column + 1):letter = get_column_letter(i)letters.append(letter)print(letters)is_two_header=Falsefor letter in letters:coord = '{}1:{}2'.format(letter, letter)if MergedCellRange(ws, coord) in merged_cells:print('是二级', coord)is_two_header=Truebreakheaders2 = []for i, e in enumerate(row1):# if isinstance(e,MergedCell) or isinstance(row2[i],MergedCell):if e.value is not None:headers2.append({'key': e.value, 'index': i})if is_two_header:if row2[i].value is not None:if 'child' in headers2[-1]:headers2[-1]['child'].append({'key': row2[i].value, 'index': i})else:headers2[-1]['child'] = [{'key': row2[i].value, 'index': i}]print(headers2)return headers2#header = get_header()def get_value(row):"""get row value:param ws::param row::return:"""value = []for i in header:if 'child' in i:for j in i['child']:v = row[j['index']].valuevalue.append(v)else:v = row[i['index']].valuevalue.append(v)print(value)# for i,e in enumerate(row):#     print(e.value)
def get_headers2():merged_cells = ws.merged_cells.rangesis_two_header = Falsename_cell_row_start = Nonename_cell_row_end=Nonerow1=Nonefor merge_cell in merged_cells:cell = ws.cell(merge_cell.min_row, merge_cell.min_col)#print(cell.value)if cell.value and isinstance(cell.value,str) and '姓名' in cell.value:is_two_header=Truename_cell_row_start=merge_cell.min_rowname_cell_row_end=merge_cell.max_rowrow1 = ws[name_cell_row_start]row2 = ws[name_cell_row_end]breakif not is_two_header:for row in  ws.iter_rows(max_row=100):for cell in row:if cell.value and isinstance(cell.value,str) and '姓名' in cell.value:row1 = ws[cell.row]breakif not row1:print('没有姓名')return headers2 = []for i, e in enumerate(row1):# if isinstance(e,MergedCell) or isinstance(row2[i],MergedCell):if e.value is not None:headers2.append({'key': e.value, 'index': i})if is_two_header:if row2[i].value is not None:if 'child' in headers2[-1]:headers2[-1]['child'].append({'key': row2[i].value, 'index': i})else:headers2[-1]['child'] = [{'key': row2[i].value, 'index': i}]print(headers2)return headers2get_headers2()

python openpyxl 获取表头相关推荐

  1. Python openpyxl打开有公式的excel表取值错误的解决办法,Python openpyxl获取excel有公式的单元格的数值错误,Python操作excel(.xlsx)封装类

    Python openpyxl打开有公式的表格,如果直接读取,会出现有公式的单元格为空或零的情况. 参见: https://blog.csdn.net/weixin_45903952/article/ ...

  2. python openpyxl 读取Excel,超简单案例python openpyxl 获取表格数据

    1. import openpyxl 导入openpyxl模块 import openpyxl #导入模块openpyxl 2. 获取的文件(×××.xlsx) 使用openpyxl下的方法获取Exc ...

  3. python经纬度获取县名_利用 Python 批量获取县镇运输距离

    起因 最近做规划项目,领导让查出某几个市的所有乡镇级行政区域,距离所在县级行政中心的交通运输距离.想着也不是啥难事儿,高德地图一搜就有. 当我把各市行政区划统计完,发现一共有五百多个乡镇,意味着要在地 ...

  4. Python.openpyxl操作Excel

    Python 操作 Excel 存取数据 1. openpyxl 模块 1.1 安装 openpyxl 模块 1.2 Excel 文件的三个对象 1.2.1 Workbook 对象 1.2.2 Wor ...

  5. python爬虫获取起点中文网人气排行Top100(快速入门,新手必备!)

    本篇博客小菌为大家带来的是用python爬虫获取起点中文网人气排行Top100的分享,希望大家能在学习的过程中感受爬虫的魅力!         我们先根据网址https://www.qidian.co ...

  6. 极速系列04—python批量获取word/PDF/网页中的表格

    这里写目录标题 1 python批量获取word中的表格 目的: 1.1 简介 1.2 读取word文档内容 方法一 方法二 2 python批量获取PDF中的表格 目的: 2.1 简介 2.2 读取 ...

  7. python openpyxl 自动设置excel列宽及行高,单元格对对齐方式

    import pandas as pd from openpyxl import load_workbook from openpyxl.utils import get_column_letter ...

  8. python爬虫获取豆瓣图书Top250

    在上一篇博客<python爬虫获取豆瓣电影TOP250>中,小菌为大家带来了如何将豆瓣电影Top250的数据存入MySQL数据库的方法.这次的分享,小菌决定再带着大家去研究如何爬取豆瓣图片 ...

  9. c# typescript_在任何IDE中从C#,Java或Python代码获取TypeScript接口的简单方法

    c# typescript by Leonardo Carreiro 莱昂纳多·卡雷罗(Leonardo Carreiro) 在任何IDE中从C#,Java或Python代码获取TypeScript接 ...

最新文章

  1. 02-dispatch_barrier
  2. 终于放弃了Maven,我选择用Gradle!
  3. DjangoHTML页面加载和静态文件加载
  4. TCP/IP协议讲的明明白白
  5. 第三十五期:AI核心难点之一:情感分析的常见类型与挑战
  6. Hadoop Hbase 模型结构
  7. 第一个java程序的错误_我是一名java初学者,执行第一个java程序welcome.java出现了以下错误,这是为什么?...
  8. 服务器webpack构建性能,webpack构建和性能优化探索
  9. Java (计算机编程语言)
  10. 用百度人工智能进行繁体文字中文OCR识别
  11. android系统同时使用wifi和4g上网
  12. 一步步教你轻松学关联规则Apriori算法
  13. vue实现ps辅助线功能
  14. 租用国外服务器兴起的背景
  15. HP3777打印机一行清晰一行不清晰
  16. 二篇、使用excel做数据驱动把数据管理起来
  17. ppp服务器中断,ppp服务器断开连接
  18. 推荐一个好用的PDF阅读器
  19. Python 查看文字编码
  20. R语言循环、连续检验

热门文章

  1. 用了TCP协议,就一定不会丢包吗?
  2. 微商如何通过自媒体平台进行引流
  3. 【大数据分析1】大数据基础理论
  4. 苹果电脑python快捷键_我常用用的MAC快捷键和手势
  5. 阿里云OSS服务器上传图片并获取路径(SpringBoot)(☆)
  6. 《剑指offer》刷题笔记(发散思维能力):求1+2+3+...+n
  7. 校招信息可以看哪些网站
  8. BDL語法知識 变量的初始话
  9. 自动驾驶轨迹预测论文阅读(二)TPNet: Trajectory Proposal Network for Motion Prediction
  10. 安卓手机管理软件_留言帮忙找:手机清理软件合集 Android