Excel文件结构详解

1. Excel文件格式概述

了解Excel文件的内部结构对于高级使用和编程处理非常重要。Excel使用多种文件格式,每种格式都有其特定的用途和特点。

主要文件格式

.xlsx - Excel工作簿(默认格式)
.xlsm - 启用宏的Excel工作簿
.xls - Excel 97-2003工作簿(旧格式)
.xlsb - Excel二进制工作簿
.csv - 逗号分隔值文件
.xltx - Excel模板
.xltm - 启用宏的Excel模板

.xlsx文件格式

现代Excel使用.xlsx格式,这是一种基于Open XML标准的压缩格式。了解其内部结构有助于编程处理和文件恢复。

重要提示:.xlsx文件本质上是一个ZIP压缩包,解压后可以看到其内部XML结构。

2. .xlsx文件内部结构

当你解压一个.xlsx文件时,会看到以下目录结构:

workbook.xlsx/
├── [Content_Types].xml # 内容类型定义
├── _rels/ # 关系目录
│ └── .rels # 主关系文件
├── docProps/ # 文档属性
│ ├── app.xml # 应用程序属性
│ └── core.xml # 核心属性(作者、创建时间等)
├── xl/ # 工作簿主要内容
│ ├── workbook.xml # 工作簿定义
│ ├── _rels/ # 工作簿关系
│ ├── worksheets/ # 工作表目录
│ │ ├── sheet1.xml # 第一个工作表
│ │ ├── sheet2.xml # 第二个工作表
│ │ └── ...
│ ├── styles.xml # 样式定义
│ ├── sharedStrings.xml # 共享字符串
│ ├── theme/ # 主题
│ │ └── theme1.xml
│ └── media/ # 媒体文件(图片等)

关键文件说明

3. 工作簿结构(workbook.xml)

workbook.xml是Excel文件的核心,定义了整个工作簿的结构。

主要组成部分

<workbook>
<fileVersion .../>
<workbookPr .../>
<bookViews>
<workbookView .../>
</bookViews>
<sheets>
<sheet name="Sheet1" sheetId="1" r:id="rId1"/>
<sheet name="Sheet2" sheetId="2" r:id="rId2"/>
</sheets>
<definedNames>
<definedName name="MyRange">Sheet1!$A$1:$C$10</definedName>
</definedNames>
<calcPr .../>
</workbook>

工作表引用

每个工作表都有一个唯一的ID和关系ID,通过这些ID可以找到对应的工作表XML文件。

4. 工作表结构(sheet.xml)

每个工作表都有独立的XML文件,包含该工作表的所有数据、公式和格式信息。

基本结构

<worksheet>
<dimension ref="A1:D10"/>
<sheets>
<sheetView .../>
</sheets>
<cols>
<col min="1" max="1" width="15"/>
</cols>
<sheetData>
<row r="1">
<c r="A1">
<v>123</v>
</c>
<c r="B1" t="s">
<v>0</v>
</c>
</row>
</sheetData>
<mergeCells>
<mergeCell ref="A1:B1"/>
</mergeCells>
<conditionalFormatting>
<cfRule .../>
</conditionalFormatting>
</worksheet>

单元格数据类型

单元格的type属性(t)定义了数据的类型:

无属性或t="n" - 数字
t="s" - 字符串(引用sharedStrings.xml)
t="str" - 内联字符串
t="b" - 布尔值
t="e" - 错误值
t="d" - 日期

5. 共享字符串表(sharedStrings.xml)

为了优化文件大小,Excel将所有文本字符串存储在一个共享字符串表中。

结构示例

<sst xmlns="..." count="10" uniqueCount="5">
<si>
<t>产品名称</t>
</si>
<si>
<t>数量</t>
</si>
<si>
<t>单价</t>
</si>
<si>
<t>合计</t>
</si>
<si>
<t>总计</t>
</si>
</sst>
优化技巧:当多个单元格包含相同的文本时,使用共享字符串表可以显著减少文件大小。

6. 样式定义(styles.xml)

styles.xml定义了工作簿中使用的所有样式,包括字体、填充、边框、数字格式等。

样式结构

<styleSheet xmlns="...">
<numFmts count="2">
<numFmt numFmtId="164" formatCode="#,##0.00"/>
</numFmts>
<fonts count="3">
<font>
<sz val="11"/>
<name val="Calibri"/>
<b/>
<color rgb="FF0000"/>
</font>
</fonts>
<fills count="2">
<fill>
<patternFill patternType="solid">
<fgColor rgb="4CAF50"/>
</patternFill>
</fill>
</fills>
<borders count="1">
<border>
<left style="thin">
<color rgb="000000"/>
</left>
</border>
</borders>
<cellXfs count="5">
<xf numFmtId="0" fontId="0" fillId="0" borderId="0"/>
<xf numFmtId="164" fontId="1" fillId="1" borderId="1"/>
</cellXfs>
<cellStyles count="1">
<cellStyle xfId="0" name="Normal"/>
</cellStyles>
</styleSheet>

7. 公式存储

公式存储在工作表XML文件的<c>元素中,使用<f>标签表示。

公式示例

<c r="D2">
<f>B2*C2</f>
<v>5000</v>
</c>

<c r="D3">
<f t="shared" ref="D2:D10" si="0">B3*C3</f>
<!-- 共享公式 -->
</c>

公式类型

8. 关系文件(_rels)

关系文件定义了文件内部各部分之间的关联关系,是Open XML格式的重要组成部分。

主关系文件

<Relationships xmlns="...">
<Relationship Id="rId1"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
Target="xl/workbook.xml"/>
<Relationship Id="rId2"
Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"
Target="docProps/core.xml"/>
<Relationship Id="rId3"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties"
Target="docProps/app.xml"/>
</Relationships>

9. 媒体文件

Excel文件中的图片、图表等媒体文件存储在xl/media目录中。

媒体类型

xl/media/
├── image1.png
├── image2.jpg
├── chart1.xml
└── ...

10. .xlsm与.xlsx的区别

.xlsm文件是启用宏的工作簿,与.xlsx的主要区别在于:

.xlsm文件结构

workbook.xlsm/
├── [Content_Types].xml
├── _rels/
├── docProps/
├── xl/
│ ├── workbook.xml
│ ├── worksheets/
│ ├── styles.xml
│ ├── sharedStrings.xml
│ ├── vbaProject.bin
│ └── _rels/
│ └── workbook.xml.rels

11. .xls旧格式

.xls是Excel 97-2003使用的二进制格式,称为BIFF(Binary Interchange File Format)。

特点

注意:.xls格式已经过时,建议使用.xlsx格式,除非有特殊的兼容性需求。

12. .xlsb二进制格式

.xlsb是Excel二进制工作簿格式,结合了二进制和XML的优点。

特点

13. CSV格式

CSV(Comma-Separated Values)是一种简单的文本格式,常用于数据交换。

CSV示例

产品名称,数量,单价,金额
产品A,100,50,5000
产品B,200,80,16000
产品C,150,60,9000

特点

14. Excel文件操作最佳实践

文件管理

性能优化

版本控制

15. 本章小结

本章详细介绍了Excel文件的内部结构,你现在应该了解:

学习建议:了解Excel文件结构对于编程处理Excel文件非常重要。如果你打算使用Python或GoLang处理Excel,建议深入理解这些概念。

在下一章中,我们将开始学习Excel的基本操作,包括数据输入、编辑和管理等内容。