PDF转Excel:高效去除AI特征,实现数据自由编辑
1620
2022-10-18
掀开面纱,看看Excel文件到底是什么
从Excel 2007开始,Microsoft采用了新的文件格式,称为开放的XML文件格式,很好地改进了文件和数据管理、数据恢复和可交互能力。现在,任何支持XML的应用程序都能访问和处理Excel文件信息,即便在系统没有安装Office软件时,也可以查看文件的内容。
认识Excel文件
我们先准备一个Excel文件。
新建一个Excel工作簿,输入数据、绘制图表、放置图片、形状和控件、输入VBA代码,将其命名为ExcelFile.xlsm,如下图1所示。
图1
接着,关闭该工作簿。
然后,试试为该工作簿添加zip扩展名——ExcelFile.xlsm.zip。
发生了什么?
Excel文件变成了一个压缩文件。下图2展示了这个过程。
图2
可以看出,Excel文件实际上是一个压缩文件包。
每个文件包由许多XML文件组成,Microsoft将这些文件称作“部件”。这些部件通过定义在不同的XML文件里的关系联系在一起。
如上图2所示,该Excel工作簿文件包中包含了3个根文件夹和1个文件,它们存储着文件的组成结构关系、工作簿数据、文档设置信息等内容。
每个文件夹中的子文件夹或文件如下图3所示。
图3
_rels文件夹
包含一个名为.rels的文件,存储着Excel文件包关系的信息。有三个关系属性:
属性Id为任意的字符串,但必须唯一。
属性Type表示关系的类型。
属性Target指定包含关系的目标文件夹和文件。
docProps文件夹
xl文件夹
包含文件的核心部分。根据工作簿的具体内容,含有一些子文件夹,以及工作簿设置的XML文件。如果工作簿中含有VBA代码,那么文件夹中还有以bin为扩展名的二进制文件。
_rels子文件夹:关系文件workbook.xml.rels定义了工作簿、数据和格式部件的关系。
charts子文件夹:包含图表设置的XML文件。
chartsheets子文件夹:包含工作簿中每个图表数据的XML文件。
drawings子文件夹:包含工作簿中形状、图片、图表数据及关系的XML文件。
media子文件夹:包含内嵌的媒体文件,如JPG文件、GIF文件等。
theme子文件夹:包含工作簿主题的数据的XML文件。
worksheets子文件夹:包含工作簿中每个工作表的XML文件。
此外,如果工作簿中有ActiveX控件、表等,还会有下列子文件夹:
activeX子文件夹:包含控件设置的XML文件。
diagrams子文件夹:描述工作簿中形状(SmartArt)的XML文件。
tables子文件夹:包含带有每个表的数据的XML文件。
除了一些子文件夹外,还有一些单独的XML文件。
[Content_Types].xml文件
列出了包括在Excel文件包中其它部件的内容类型。
了解XML文件的内容
以上文列举的workbook.xml文件为例,其内容如下图4所示。
图4
在这个文件中,可以找到每个工作表对应的id号,即r:id。如果想要对某个工作表进行操作,那么可以先找到该工作表的r:id。
例如,假设想要在工作表Sheet2中添加内容,则需要找到包含该工作表内容的xml文件。
首先,从图4中可以找到工作表Sheet2的r:id为rId3。
接着,查看子文件夹_rels中workbook.xml.rels文件的XML代码,如图5所示。
图5
可以找到Id值为“rId3”对应的工作表XML文件为sheet2.xml。
然后,在子文件夹worksheets中找到sheet2.xml,如下图6所示,其对应着工作表Sheet2。
图6
工作表Sheet2中的内容如下图7所示。
图7
其sheet2.xml文件的内容如下图8所示。
图8
工作表Sheet2中单元格A1的内容在哪里呢?找到图8中的内容:
可以知道单元格A1中包含字符串(t=”s”),下一行:
4告诉我们需要在文件夹“xl”中名为sharedStrings.xml的文件里查找项目的索引数值为4。
下图9所示为文件sharedString.xml的内容:
图9
看看该文件的顶部的红色下划线部分,表明该工作簿中共有5个唯一字符串。由于索引值以0为基数,而我们要查找的索引值是4,因此需要找到该文件中第5个“”项,如上图9中的红色方框部分。
使用XML文件操作Excel文档
在单元格中添加文本
在工作表Sheet2中添加新的文本数据。
首先,修改文件sharedStrings.xml顶部的字符串数,将5修改为6,如图10所示。
图10
接着,在该文件中添加新字符串,如图11所示。
图11
然后,修改文件sheet2.xml,以添加含有新字符串的行,如图12所示。
图12
添加文本数据后的工作表Sheet2如下图13所示。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。