1.Excel文件XML结构
Excel2007是使用XML格式来存储的,把一个excel文件(test.xlsx)后缀改为.zip,打开之后就可以看到这个Excel2007文件的XML文件包结构如下:
2.[Content_Types].xml
[Content_Types].xml描述整个Excel内容的结构 - Excel各个XML文件联系成一个整体
3.docProps文件夹
Excel存储格式\docProps文件夹中的xml记录了Excel文档的属性信息
- core.xml : 描述文件的创建时间和修改时间,标题,主题和作者
- app.xml :描述文档的其他属性,文档类型,版本,是否只读,是否共享,安全属性等文档属性信息。
3.1 core.xml
core.xml描述文件的创建时间和修改时间,标题,主题和作者
3.2 app.xml
描述文档的其他属性:文档类型,版本,是否只读,是否共享,安全属性等文档属性信息。
4.xl文件夹
如果工作簿中有VB工程,则会出现相应的二进制文件
- _rels文件夹 : 描述了工作簿Workbook中各个xml之间的关系
- printerSettings文件夹 : 描述了打印设置
- theme文件夹: 描述了是当前的设置导航栏的默认样式
4.1 workbook.xml
- workbook.xml文件包含一对标签
- 每个元素都代表Excel 2007文件中的一个工作,这里有4个sheet
- 工作表name属性值表示工作表名称
- 工作表state属性值表示当前工作表是否隐藏
- 工作表r:id属性值表示当前工作表对应xml文件的索引,之间的关系在_rels/workbook.xml.rels.xml中定义
当前Excel:
对应的workbook.xml:
4.2 sharedStrings.xml
- Excel将各个sheet中字符型单元格的值存放在sharedStrings.xml中,用于共享,相同的字符串只记录一次,节省了内存
- 每个sheet中字符型单元格的值通过索引获取sharedStrings.xml中的字符串,索引从0开始,即si从0开始
- 数值型单元格的值直接存放在sheet*.xml中
4.3 styles.xml
sheet中的每个单元格的样式都存放在styles.xml中
4.4 sheet.xml
- 标签的ref表示当前Sheet的行列范围
- 如ref=”A1”,即可能表示当前Sheet只有A1单元格有值,也可能表示当前Sheet为空,表示没有值
- 如ref=”A1:C3”,表示当前Sheet行范围为第1行到第3行,列范围为第A列到第C列
当前基本单元格Sheet:
当前Sheet对应的Sheet1.xml:
4.5 字符型单元格
- 标签的spans属性记录当前行的列范围,是base 1的
- 标签中存放字符型单元格值在sharedStrings.xml中的索引
当前字符型单元格Sheet:
当前Sheet对应的Sheet2.xml:
共享字符型集合sharedString.xml:
4.6 数值型单元格
- 标签直接存放数值型单元格的内容
- 日期型单元格内部以浮点数存储,整数部分是日期,表示从1900-1-1以来的天数,小数表示时间
当前字符型单元格Sheet:
当前Sheet对应的Sheet3.xml:
4.7 公式单元格
- 公式单元格标签表示公式表达式
- 公式单元格标签表示公式计算后的值
当前公式单元格Sheet:
当前Sheet对应的Sheet6.xml:
4.8 自定义行高列宽单元格
- 标签记录了定义的每列的列属性信息
- 标签记录了一列的列属性信息
- 标签的customWidth属性表示该列自定义列宽
- 标签的width属性表示该列的列宽
- 标签的min和max属性表示范围内列的列宽,如min=”5”,max=”7”,表示第5列到第7列的列宽是相同的
- 标签的style属性表示当前列的列样式的索引
- 标签的hidden属性表示当前列为隐藏列
当前自定义单元格Sheet:
当前Sheet对应的sheet4.xml:
当前Excel对应的styles.xml:
4.9 合并单元格
- 合并单元格值存放在合并区域左上角单元格中
- 标签中存放了Sheet中单元格合并信息
当前合并单元格的Sheet:
当前Sheet对应的sheet5.xml:
4.10 隐藏行列单元格
- 标签的hidden表示当前列为隐藏列
- 标签的hidden表示当前行为隐藏行
当前隐藏行列Sheet:
当前Sheet对应sheet7.xml: