做菠菜网站网站建设 数据库连接
2026/4/7 5:37:02 网站建设 项目流程
做菠菜网站,网站建设 数据库连接,编程软件哪个好用,wordpress无法设置语言包摘要 在数据分析与报表自动化场景中#xff0c;Excel 图表往往承载着关键业务信息#xff0c;但常规库对图表结构与样式的解析能力有限。本文基于 OpenXML 规范#xff0c;通过将 .xlsx 文件视为 ZIP 压缩包#xff0c;直接解析 xl/charts/chart*.xml#xff0c;实现了对…摘要在数据分析与报表自动化场景中Excel 图表往往承载着关键业务信息但常规库对图表结构与样式的解析能力有限。本文基于 OpenXML 规范通过将 .xlsx 文件视为 ZIP 压缩包直接解析 xl/charts/chart*.xml实现了对 Excel 图表元数据的精准提取。使用 Python 的 urllib、zipfile 与 xml.etree.ElementTree完整获取了图表标题、系列名称、X/Y 轴数据以及标题、坐标轴和数据系列的字体与字号信息。实践结果表明该方法无需依赖 Excel 环境适用于线上 Excel 文件解析、图表规范校验及报表自动化处理为 Excel 图表的深度解析与二次利用提供了一种高效可行的技术方案。一、背景介绍在实际项目中我们经常会遇到这样的需求线上 Excel 文件HTTP 地址不关心单元格数据而是需要图表标题系列名称X / Y 轴数据图表、坐标轴、系列的字体和字号然而openpyxl等库并不能完整解析 Excel 图表的样式和结构。事实上.xlsx本质上是一个ZIP 压缩包图表信息存储在xl/charts/chart*.xml只要我们直接解析这个 XML就能拿到几乎全部图表元数据。二、整体思路技术路线通过urllib下载 Excel 文件使用ZipFile读取 xlsx 内部结构定位xl/charts/chart1.xml使用xml.etree.ElementTree解析图表 XML按 OpenXML 规范解析标题title系列ser分类轴catAx数值轴valAx字体、字号X / Y 轴数据三、核心代码实现1️⃣ 完整函数代码importxml.etree.ElementTreeasETfromzipfileimportZipFileimportioimporturllib.requestdefget_chat_info(direct_link):result{}res{}try:# 下载 Excel 文件fileurllib.request.urlopen(direct_link).read()archiveZipFile(io.BytesIO(file))try:# 读取图表 XMLdataarchive.read(xl/charts/chart1.xml)res[code]200res[msg]获取图表信息成功treeET.parse(io.BytesIO(data))roottree.getroot()# 命名空间ns{c:http://schemas.openxmlformats.org/drawingml/2006/chart,a:http://schemas.openxmlformats.org/drawingml/2006/main}# 图表标题 title_elementroot.find(.//c:title/c:tx/c:rich,ns)iftitle_elementisnotNone:title_textfortintitle_element.iter({http://schemas.openxmlformats.org/drawingml/2006/main}t):title_textt.text result[title]title_text title_ax_elementroot.find(.//c:chart/c:title/c:tx,ns)iftitle_ax_elementisnotNone:tx_prtitle_ax_element.find(.//a:defRPr,ns)iftx_prisnotNone:latintx_pr.find(.//a:latin,ns)result[title_font]latin.get(typeface)iflatinisnotNoneelsenoresult[title_size]tx_pr.get(sz)orno# 系列名称 ser_elementsroot.findall(.//c:chart/c:plotArea/*/c:ser,ns)series_nameforserinser_elements:vser.find(.//c:v,ns)ifvisnotNone:series_namev.text result[series_name]series_name# X / Y 数据 x_values,y_values[],[]fornum_refinroot.findall(.//c:numRef,ns):forvinnum_ref.findall(.//c:v,ns):y_values.append(v.text)forptinroot.findall(.//c:cat/c:strRef/c:strCache/c:pt,ns):vpt.find(.//c:v,ns)ifvisnotNone:x_values.append(v.text)result[x_values]x_values result[y_values]y_values# 数值轴 val_axroot.find(.//c:valAx,ns)ifval_axisnotNone:tx_prval_ax.find(.//c:txPr/a:p/a:pPr/a:defRPr,ns)iftx_prisnotNone:latintx_pr.find(.//a:latin,ns)result[valAx_font]latin.get(typeface)iflatinisnotNoneelsenoresult[valAx_size]tx_pr.get(sz)orno# 分类轴 cat_axroot.find(.//c:catAx,ns)ifcat_axisnotNone:tx_prcat_ax.find(.//c:txPr/a:p/a:pPr/a:defRPr,ns)iftx_prisnotNone:latintx_pr.find(.//a:latin,ns)result[catAx_font]latin.get(typeface)iflatinisnotNoneelsenoresult[catAx_size]tx_pr.get(sz)orno# 系列字体 serroot.find(.//c:chart/c:plotArea/*/c:ser,ns)ifserisnotNone:tx_prser.find(.//a:defRPr,ns)iftx_prisnotNone:latintx_pr.find(.//a:latin,ns)result[ser_font]latin.get(typeface)iflatinisnotNoneelsenoresult[ser_size]tx_pr.get(sz)ornores[data]resultexcept:res[code]404res[msg]未找到图表信息except:res[code]500res[msg]未获取excel信息returnres四、测试示例aaget_chat_info(http://192.168.31.161:8080/555.xlsx)print(aa)五、运行结果示例{code:200,msg:获取图表信息成功,data:{title:各季度采购合理性折线图,title_font:宋体,title_size:1200,series_name:采购合理性,x_values:[2018-1,2018-2,2018-3,2018-4,Jan-19,2019-2,2019-3,2019-4,2020-1,2020-2,2020-3,2020-4,2021-1,2021-2,2021-3,2021-4,2022-1,2022-2,2022-3,2022-4],y_values:[0.99,0.92,0.91,0.37,0.85,0.97,0.8,0.88,0.67,0.91,0.76,0.75,0.99,0.95,0.89,0.83,0.44,0.75,0.94,0.41],valAx_font:宋体,valAx_size:1000,catAx_font:宋体,catAx_size:1000,ser_font:宋体,ser_size:1000}}六、关键知识点总结✅.xlsx是 ZIP 文件✅ 图表数据在xl/charts/chart*.xml✅ Excel 图表完全遵循OpenXML 规范✅ 字体大小单位为1/100 磅pt1000 10pt1200 12pt七、适用场景自动化审计 Excel 报表图表规范校验字体 / 标题 / 数据完整性Excel → 图表数据 → Web 可视化报表 AI / LLM 解析前的数据结构化文章关联Python 使用 openpyxl 从 URL 读取 Excel 并获取 Sheet 及单元格样式信息

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询