python openpyxl 获取表头
适合单表头和多级表头,注意关键词判断
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 获取表头相关推荐
- Python openpyxl打开有公式的excel表取值错误的解决办法,Python openpyxl获取excel有公式的单元格的数值错误,Python操作excel(.xlsx)封装类
Python openpyxl打开有公式的表格,如果直接读取,会出现有公式的单元格为空或零的情况. 参见: https://blog.csdn.net/weixin_45903952/article/ ...
- python openpyxl 读取Excel,超简单案例python openpyxl 获取表格数据
1. import openpyxl 导入openpyxl模块 import openpyxl #导入模块openpyxl 2. 获取的文件(×××.xlsx) 使用openpyxl下的方法获取Exc ...
- python经纬度获取县名_利用 Python 批量获取县镇运输距离
起因 最近做规划项目,领导让查出某几个市的所有乡镇级行政区域,距离所在县级行政中心的交通运输距离.想着也不是啥难事儿,高德地图一搜就有. 当我把各市行政区划统计完,发现一共有五百多个乡镇,意味着要在地 ...
- Python.openpyxl操作Excel
Python 操作 Excel 存取数据 1. openpyxl 模块 1.1 安装 openpyxl 模块 1.2 Excel 文件的三个对象 1.2.1 Workbook 对象 1.2.2 Wor ...
- python爬虫获取起点中文网人气排行Top100(快速入门,新手必备!)
本篇博客小菌为大家带来的是用python爬虫获取起点中文网人气排行Top100的分享,希望大家能在学习的过程中感受爬虫的魅力! 我们先根据网址https://www.qidian.co ...
- 极速系列04—python批量获取word/PDF/网页中的表格
这里写目录标题 1 python批量获取word中的表格 目的: 1.1 简介 1.2 读取word文档内容 方法一 方法二 2 python批量获取PDF中的表格 目的: 2.1 简介 2.2 读取 ...
- python openpyxl 自动设置excel列宽及行高,单元格对对齐方式
import pandas as pd from openpyxl import load_workbook from openpyxl.utils import get_column_letter ...
- python爬虫获取豆瓣图书Top250
在上一篇博客<python爬虫获取豆瓣电影TOP250>中,小菌为大家带来了如何将豆瓣电影Top250的数据存入MySQL数据库的方法.这次的分享,小菌决定再带着大家去研究如何爬取豆瓣图片 ...
- c# typescript_在任何IDE中从C#,Java或Python代码获取TypeScript接口的简单方法
c# typescript by Leonardo Carreiro 莱昂纳多·卡雷罗(Leonardo Carreiro) 在任何IDE中从C#,Java或Python代码获取TypeScript接 ...
最新文章
- 02-dispatch_barrier
- 终于放弃了Maven,我选择用Gradle!
- DjangoHTML页面加载和静态文件加载
- TCP/IP协议讲的明明白白
- 第三十五期:AI核心难点之一:情感分析的常见类型与挑战
- Hadoop Hbase 模型结构
- 第一个java程序的错误_我是一名java初学者,执行第一个java程序welcome.java出现了以下错误,这是为什么?...
- 服务器webpack构建性能,webpack构建和性能优化探索
- Java (计算机编程语言)
- 用百度人工智能进行繁体文字中文OCR识别
- android系统同时使用wifi和4g上网
- 一步步教你轻松学关联规则Apriori算法
- vue实现ps辅助线功能
- 租用国外服务器兴起的背景
- HP3777打印机一行清晰一行不清晰
- 二篇、使用excel做数据驱动把数据管理起来
- ppp服务器中断,ppp服务器断开连接
- 推荐一个好用的PDF阅读器
- Python 查看文字编码
- R语言循环、连续检验
热门文章
- 用了TCP协议,就一定不会丢包吗?
- 微商如何通过自媒体平台进行引流
- 【大数据分析1】大数据基础理论
- 苹果电脑python快捷键_我常用用的MAC快捷键和手势
- 阿里云OSS服务器上传图片并获取路径(SpringBoot)(☆)
- 《剑指offer》刷题笔记(发散思维能力):求1+2+3+...+n
- 校招信息可以看哪些网站
- BDL語法知識 变量的初始话
- 自动驾驶轨迹预测论文阅读(二)TPNet: Trajectory Proposal Network for Motion Prediction
- 安卓手机管理软件_留言帮忙找:手机清理软件合集 Android