Excel 对于很多人来说应当是日常工作中接触最多的一类办公软件了,然而我们对其却没有真正深入了解过。最近闲来无事,简单学习了下。Excel 文件本质上是一个包含多个 xml 文件的压缩包。我们可以通过将 Excel 文件的扩展名更改为 .zip 或 .rar ,解压该文件来查看其结构。下面便以下面截图的 Excel 文件简单说下其对应的结构文件都是做什么的。
首先我将制作好的“Excel~文件结构初窥.xlsx”文件拓展名改为 .zip 然后对其解压,得到下面的文件目录。
- _rels 文件夹:内含一个名为 .rels 的文件,包含关于该工作簿程序包的各文件关系。
- docProps 文件夹:内含一个 app.xml 与一个 core.xml 分别定义工作簿的各元数据。
- xl 文件夹:内含多个文件夹及文件,主要为描述该工作簿下各工作表的文件。
- [Content_Types].xml 文件:列出了该工作簿下包含的各个部件信息。
[Content_Types].xml 文件
首先说下 [Content_Types].xml 文件吧,了解完它之后应该可以对我们之后要展开的东西的脉络更清晰些。下面是我制作好的工作簿的 [Content_Types].xml 内的代码:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> <Default Extension="bin" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings"/> <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/> <Default Extension="xml" ContentType="application/xml"/> <Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/> <Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/> <Override PartName="/xl/worksheets/sheet2.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/> <Override PartName="/xl/worksheets/sheet3.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/> <Override PartName="/xl/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/> <Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/> <Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/> <Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/> <Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/> </Types>
- Type : 包含枚举 VSIX 包中的文件类型的子元素
- xmlns :(必选)使用此 [Content_Types].xml 文件的架构的位置
- Default :ZIP压缩包每种文件类型的引用, Extension 值为 VSIX 包中的文件扩展名
- Override :不同类型文档内容的 XML 部件的引用, PartName 值为链接外部文件的位置
- ContentType :说明与文件扩展名相关联的内容类型
_rels 文件夹
_rels 文件夹下只有一个 .rels 文件,用于说明该程序包中的各文件关系。其代码如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/> <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/> <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/> </Relationships>
- Id :唯一值,可以是任意字符串
- Type :包含各文件的关系类型
- Target :包含各文件的位置
docProps 文件夹
docProps 文件夹下包含两个文件:app.xml 与 core.xml 。分开来说明一下。
app.xml
app.xml 文件下定义了该文档的一些基本属性,包括但不限于“加密情况”、“工作簿名称”、“公司名称”、“应用程序版本”等,就本例而言,代码中我已经做了相应的注释,大家看下即可。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"> <!-- 应用程序名称 --> <Application>Microsoft Excel</Application> <!-- 是否加密 --> <DocSecurity>0</DocSecurity> <ScaleCrop>false</ScaleCrop> <!-- Excel头部标题信息 --> <HeadingPairs> <vt:vector size="2" baseType="variant"> <vt:variant> <vt:lpstr>工作表</vt:lpstr> </vt:variant> <vt:variant> <vt:i4>3</vt:i4> </vt:variant> </vt:vector> </HeadingPairs> <!-- Excel底部工作表信息 --> <TitlesOfParts> <vt:vector size="3" baseType="lpstr"> <vt:lpstr>Sheet1</vt:lpstr> <vt:lpstr>Sheet2</vt:lpstr> <vt:lpstr>Sheet3</vt:lpstr> </vt:vector> </TitlesOfParts> <!-- 公司名称 --> <Company></Company> <!-- 最新链接 --> <LinksUpToDate>false</LinksUpToDate> <!-- 是否共享 --> <SharedDoc>false</SharedDoc> <!-- 超链接更改 --> <HyperlinksChanged>false</HyperlinksChanged> <!-- 应用程序版本 --> <AppVersion>16.0300</AppVersion> </Properties>
core.xml
core.xml 文件中定义的信息与 app.xml 类似,也是一些基础属性信息,具体代码如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- 作者 --> <dc:creator>QuietGuoGuo</dc:creator> <!-- 最后一次保存者 --> <cp:lastModifiedBy>QuietGuoGuo</cp:lastModifiedBy> <!-- 创建内容的时间 --> <dcterms:created xsi:type="dcterms:W3CDTF">2019-01-14T16:19:53Z</dcterms:created> <!-- 最后一次保存的日期 --> <dcterms:modified xsi:type="dcterms:W3CDTF">2019-01-17T13:34:41Z</dcterms:modified> </cp:coreProperties>
如果非要更直观地说的话,该文件定义的信息你可以通过右键“属性/详细信息”查看到,如下图所示:
xl 文件夹
上面提到的文件基本上是描述整个工作簿的,xl 文件夹里面的内容主要是描述工作簿下各个工作表的。其文件结构与程序包的有点类似,本例中该文件夹下的文件如下图所示:
先说下外面这几个文件:
- sharedStrings.xml :记录表格中输入的各数据信息
- styles.xml :Excel 工作表中设置的各样式信息
- workbook.xml :定义工作簿中的各个部件信息
_rels 文件夹
与前面根目录下的 _rels 文件夹类似,只不过该文件夹下文件名为 workbook.xml.rels ,用于说明该工作簿下各文件的关系。其代码如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet3.xml"/> <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet2.xml"/> <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/> <Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings" Target="sharedStrings.xml"/> <Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/> <Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/> </Relationships>
printerSettings 文件夹
printerSettings 文件夹下有一个 printerSettings1.bin 文件,主要是描述应用程序打印时如何打印文档的信息。
theme 文件夹
theme 文件夹下包含工作簿主题的数据的XML文件。比如这里的 theme1.xml 。代码不贴了,没多大意义。
worksheets 文件夹
worksheets 文件夹下主要是各个工作表的一些信息,sheet1.xml、sheet2.xml、sheet3.xml 里都是一些描述表的代码,这里就不细说了。
同样该文件夹下又有一个 _rels 文件夹,其中有个 sheet1.xml.rels 文件,用于说明该工作表下各文件的关系。代码如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings" Target="../printerSettings/printerSettings1.bin"/> <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" Target="https://blog.quietguoguo.com/" TargetMode="External"/> </Relationships>
当然,这里我只是建立了一个简单的工作簿作为例子,更丰富的工作簿可能包含一些我上面没提到的文件及文件夹,正常。
参考文档:
https://docs.microsoft.com/zh-cn/dotnet/api/documentformat.openxml?view=openxml-2.8.1
写到最后有点烦躁,如果有错误信息,希望看到的小伙伴指出。
评论 抢沙发