京公网安备 11010802034615号
经营许可证编号:京B2-20210330
[从产品角度学EXCEL 02]-EXCEL里的树形结构
前言请看:
0 为什么要关注Excel的本质
1 excel是怎样运作的
本文仅由尾巴本人发布于特定网站。不接受任何无授权转载,如需转载,请先联系我,非常感谢。
2 Excel里的树形结构
这段时间,上海街边的树上陆陆续续长出了嫩芽,放眼望去有各种层次的绿色,格外好看。我们今天的话题,恰好也与树有关。只不过,树都是往天空伸展枝叶的,而我们这里讨论的‘树’,却是由根部出发,逐行逐行往下延展、伸展。
还记得上一个章节里,我们对一个excel文件解压缩后,发现了若干个xml文件吗?
xml本质上是一种使用树形结构存储信息的文档。它由一个根节点root开始,逐层逐层长枝节,并给每一层都打了个标签,让xml解析器可以快速定位信息的内容。而每一层以及每一个底部的节点,都是这些信息的一个分类属性。我们了解了它们的属性和层级,也就了解这颗结构树长成什么样子。
正因为xml的结构与层级是如此重要,在进一步讲单元格之前,我们很有必要先剖析看看excel xml树的结构,从大体上再来理解一下excel储存文件的方式。
需要注意的是,这一章节大概是整个系列里涉及最多编程的章节了。如果各位对编程不是特别感兴趣,可以先跳过这一节,去看后面的内容。不过按照我个人的经验来说,不管你是用excel做一些简单的数据处理,还是想要在数据分析行业里走得稳妥一些,了解了解编程,只会有好处而没有坏处。尤其是编程的一些思想,如妥善地设计接口,分隔各个功能块等,即使你用excel处理数据,这些也对你十分有好处。
言归正传吧。我们回过头来再看看excel解压缩以后的xml文件。
让我们随意打开一个xml文件,一串串密密麻麻的字符就这样跳了出来。
对于不熟悉xml架构的人来说,我们只会看到眼花缭乱的括号,等号,引号。但是如果你对xml有点理解,你就会知道,这一系列的标点符号框起了一个个xml的数据结构。
对于xml来说,每一个层级都是由<标签 属性=ABC>内容信息</标签>构成的。有的内容信息里又会再次嵌套一层标签层级,重重相叠,从根部开始向下延展出了无数枝叶,构成了一棵看似错综复杂,却是层次分明的xml树。人们只要定位到某一个枝叶,就可以迅速把这个枝叶下的特定信息取出来。而要搞懂这棵xml树长什么样子,首先就要搞懂说这棵树是有哪些层级,各个层级叫什么,有什么内容。
但是各位再回顾看看上面的截图,一长串一长串的代码,你当然可以一个个去判断说,啊,根标签从worksheet开始,下面有selection层级,有f层级等等,但是这样子做,不仅低效,而且会有遗漏。
请各位在学习excel时,随时记住一个原则,那就是可以不要手工去做的事情,就不要手工去做。宁愿自己脑子废点脑力构思最优方法,也不要直接就开始机械的作业。
那么,在这里,面临这个要人工一个个看标签的艰巨任务时,我们该如何是好呢?
在这里跟大家再普及一个概念的是,xml嘛,除了微软在用于office系列文档储存格式以外,它还广泛应用于各种网页设计领域。而在网页获取信息这一块,我们天然有很多工具可以通过读取html或者xml源代码,解析它们的结构,进行数据提取工作(高级点叫法即网络爬虫)
所以对于这里的excel xml源文件,我们自然可以应用各种爬虫工具,把xml的框架给找出来。
我 用的比较熟的应该是R语言的rvest包爬虫了,查了一下它的文档,有一个叫xml_structure的,可以直接把xml文件的标签层次给读出来,而 xml_nodes/xml_attr等,又可以把里面特定的标签内容给分层读出来。那么写一段代码,帮我把excel的xml源文件里的层级与内容弄出 来,那就省了我很大的心力啦^^
因为R语言代码并不是我们的重点,所以我把源代码放在文章末尾的扩展阅读里了,有需要的可以去看看,也可以用其他语言写写。有的时候只要学会一点点的编程,就能大大的改善各位的工作效率。要用好工具而不是被工具玩,是我希望在这系列excel教程里告诉大家的一个点。
那么言归正传。请各位看看下面这个用R语言跑出来的csv文件截图。
左列是我们的标签名,右列是我们标签里面包含的文本。通过这个文件,我们就可以很容易知道各个标签里存放了什么文本信息。我们会发现row下面是一串串的c/v/f。而c与v的信息几乎完全一样。
另外,在r里,我们可以通过xml_structure输出xml文件的结构。这两个结合起来,我为各位绘制了一张sheet1.xml的树形结构图:
各位可以看到,在worksheet文件夹里的sheet1.xml,是在sheetdata里按照row为标签层级,存放了若干行的数据。而行又以 c(cell)为导向,存放了单元格的v (value)和f(函数)。有多少行,在sheet1.xml里就有多少row,一个row有若干个有效单元格,就会有若干个c。
从这个角度看excel,会不会对excel的产品设计层次有了进一步的理解呢?
另外,上面的截图没有出示的一点是,在worksheet这个文件夹里,数字是直接存在各个sheetxxx.xml里的,而字符类文本,却是单独存放在外面的SharedString.xml里。
嘿嘿,数字和文本的存放格式不一样,各位想到了什么?有没有虎躯一震,想到了excel里因为数字和文本的不同,带来的各种不便?
在前面啰嗦完为什么要写这个系列,以及excel是怎么工作以后,我们终于把拼图最重要的一块——解读xml补上了。
R语言解析XML源代码:
setwd("~/excel/")
library(rvest)
#代码用于《从产品角度学EXCEL》系列文章,XML解析
# read xml in zip files
get_xmllist<-function(access){
list<-list.files(access,full.names=TRUE,pattern = "xml$",recursive = TRUE)
list_name<-gsub(as.character(access),"",list)
list_name<-gsub("\\/|\\.|\\[|\\]","-",list_name)
list_name<-gsub("\\-\\-","-",list_name)
list<-data.frame(list,list_name,stringsAsFactors = FALSE)
list
}
# read xml structure
get_structure<-function(xmlfile){
data<-xml(xmlfile,encoding="UTF-8")
data<-data %>% html_nodes("*")
output<-cbind(node_names=data %>% html_tag(),
node_text=data %>% html_text())
output<-data.frame(output)
output
}
write_result<-function(dataframe,name){
write.csv(dataframe,paste0("./Output/",name,".csv"),row.names=FALSE)
}
#use these three function
xml_list<-get_xmllist("./sample u.xlsx/")
for (i in 1:nrow(xml_list)){
data<-get_structure(xml_list$list[i])
write_result(data,xml_list$list_name[i])
}
#write the structure
xml_structure(html(xml_list$list[8]))
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在数据分析、质量控制、科研实验等场景中,数据波动性(离散程度)的精准衡量是判断数据可靠性、稳定性的核心环节。标准差(Stan ...
2026-01-29在数据分析、质量检测、科研实验等领域,判断数据间是否存在本质差异是核心需求,而t检验、F检验是实现这一目标的经典统计方法。 ...
2026-01-29统计制图(数据可视化)是数据分析的核心呈现载体,它将抽象的数据转化为直观的图表、图形,让数据规律、业务差异与潜在问题一目 ...
2026-01-29箱线图(Box Plot)作为数据分布可视化的核心工具,能清晰呈现数据的中位数、四分位数、异常值等关键统计特征,广泛应用于数据分 ...
2026-01-28在回归分析、机器学习建模等数据分析场景中,多重共线性是高频数据问题——当多个自变量间存在较强的线性关联时,会导致模型系数 ...
2026-01-28数据分析的价值落地,离不开科学方法的支撑。六种核心分析方法——描述性分析、诊断性分析、预测性分析、规范性分析、对比分析、 ...
2026-01-28在机器学习与数据分析领域,特征是连接数据与模型的核心载体,而特征重要性分析则是挖掘数据价值、优化模型性能、赋能业务决策的 ...
2026-01-27关联分析是数据挖掘领域中挖掘数据间潜在关联关系的经典方法,广泛应用于零售购物篮分析、电商推荐、用户行为路径挖掘等场景。而 ...
2026-01-27数据分析的基础范式,是支撑数据工作从“零散操作”走向“标准化落地”的核心方法论框架,它定义了数据分析的核心逻辑、流程与目 ...
2026-01-27在数据分析、后端开发、业务运维等工作中,SQL语句是操作数据库的核心工具。面对复杂的表结构、多表关联逻辑及灵活的查询需求, ...
2026-01-26支持向量机(SVM)作为机器学习中经典的分类算法,凭借其在小样本、高维数据场景下的优异泛化能力,被广泛应用于图像识别、文本 ...
2026-01-26在数字化浪潮下,数据分析已成为企业决策的核心支撑,而CDA数据分析师作为标准化、专业化的数据人才代表,正逐步成为连接数据资 ...
2026-01-26数据分析的核心价值在于用数据驱动决策,而指标作为数据的“载体”,其选取的合理性直接决定分析结果的有效性。选对指标能精准定 ...
2026-01-23在MySQL查询编写中,我们习惯按“SELECT → FROM → WHERE → ORDER BY”的语法顺序组织语句,直觉上认为代码顺序即执行顺序。但 ...
2026-01-23数字化转型已从企业“可选项”升级为“必答题”,其核心本质是通过数据驱动业务重构、流程优化与模式创新,实现从传统运营向智能 ...
2026-01-23CDA持证人已遍布在世界范围各行各业,包括世界500强企业、顶尖科技独角兽、大型金融机构、国企事业单位、国家行政机关等等,“CDA数据分析师”人才队伍遵守着CDA职业道德准则,发挥着专业技能,已成为支撑科技发展的核心力量。 ...
2026-01-22在数字化时代,企业积累的海量数据如同散落的珍珠,而数据模型就是串联这些珍珠的线——它并非简单的数据集合,而是对现实业务场 ...
2026-01-22在数字化运营场景中,用户每一次点击、浏览、交互都构成了行为轨迹,这些轨迹交织成海量的用户行为路径。但并非所有路径都具备业 ...
2026-01-22在数字化时代,企业数据资产的价值持续攀升,数据安全已从“合规底线”升级为“生存红线”。企业数据安全管理方法论以“战略引领 ...
2026-01-22在SQL数据分析与业务查询中,日期数据是高频处理对象——订单创建时间、用户注册日期、数据统计周期等场景,都需对日期进行格式 ...
2026-01-21