POI事件模式解析Excel 2007(一) - XML存储

时间:2024-03-19 08:42:59

1.Excel文件XML结构

Excel2007是使用XML格式来存储的,把一个excel文件(test.xlsx)后缀改为.zip,打开之后就可以看到这个Excel2007文件的XML文件包结构如下:
POI事件模式解析Excel 2007(一) - XML存储

2.[Content_Types].xml

[Content_Types].xml描述整个Excel内容的结构 - Excel各个XML文件联系成一个整体
POI事件模式解析Excel 2007(一) - XML存储

3.docProps文件夹

Excel存储格式\docProps文件夹中的xml记录了Excel文档的属性信息

  • core.xml : 描述文件的创建时间和修改时间,标题,主题和作者
  • app.xml :描述文档的其他属性,文档类型,版本,是否只读,是否共享,安全属性等文档属性信息。

POI事件模式解析Excel 2007(一) - XML存储

3.1 core.xml

core.xml描述文件的创建时间和修改时间,标题,主题和作者
POI事件模式解析Excel 2007(一) - XML存储

3.2 app.xml

描述文档的其他属性:文档类型,版本,是否只读,是否共享,安全属性等文档属性信息。
POI事件模式解析Excel 2007(一) - XML存储

4.xl文件夹

如果工作簿中有VB工程,则会出现相应的二进制文件

  • _rels文件夹 : 描述了工作簿Workbook中各个xml之间的关系
  • printerSettings文件夹 : 描述了打印设置
  • theme文件夹: 描述了是当前的设置导航栏的默认样式

POI事件模式解析Excel 2007(一) - XML存储

4.1 workbook.xml

  • workbook.xml文件包含一对标签
  • 每个元素都代表Excel 2007文件中的一个工作,这里有4个sheet
  • 工作表name属性值表示工作表名称
  • 工作表state属性值表示当前工作表是否隐藏
  • 工作表r:id属性值表示当前工作表对应xml文件的索引,之间的关系在_rels/workbook.xml.rels.xml中定义
    当前Excel:
    POI事件模式解析Excel 2007(一) - XML存储
    对应的workbook.xml:
    POI事件模式解析Excel 2007(一) - XML存储

4.2 sharedStrings.xml

  • Excel将各个sheet中字符型单元格的值存放在sharedStrings.xml中,用于共享,相同的字符串只记录一次,节省了内存
  • 每个sheet中字符型单元格的值通过索引获取sharedStrings.xml中的字符串,索引从0开始,即si从0开始
  • 数值型单元格的值直接存放在sheet*.xml中

4.3 styles.xml

sheet中的每个单元格的样式都存放在styles.xml中
POI事件模式解析Excel 2007(一) - XML存储

4.4 sheet.xml

  • 标签的ref表示当前Sheet的行列范围
  • 如ref=”A1”,即可能表示当前Sheet只有A1单元格有值,也可能表示当前Sheet为空,表示没有值
  • 如ref=”A1:C3”,表示当前Sheet行范围为第1行到第3行,列范围为第A列到第C列

当前基本单元格Sheet:
POI事件模式解析Excel 2007(一) - XML存储
当前Sheet对应的Sheet1.xml:
POI事件模式解析Excel 2007(一) - XML存储

4.5 字符型单元格

  • 标签的spans属性记录当前行的列范围,是base 1的
  • 标签中存放字符型单元格值在sharedStrings.xml中的索引
    当前字符型单元格Sheet:
    POI事件模式解析Excel 2007(一) - XML存储
    当前Sheet对应的Sheet2.xml:
    POI事件模式解析Excel 2007(一) - XML存储
    共享字符型集合sharedString.xml:
    POI事件模式解析Excel 2007(一) - XML存储

4.6 数值型单元格

  • 标签直接存放数值型单元格的内容
  • 日期型单元格内部以浮点数存储,整数部分是日期,表示从1900-1-1以来的天数,小数表示时间
    当前字符型单元格Sheet:
    POI事件模式解析Excel 2007(一) - XML存储
    当前Sheet对应的Sheet3.xml:
    POI事件模式解析Excel 2007(一) - XML存储

4.7 公式单元格

  • 公式单元格标签表示公式表达式
  • 公式单元格标签表示公式计算后的值

当前公式单元格Sheet:
POI事件模式解析Excel 2007(一) - XML存储
当前Sheet对应的Sheet6.xml:
POI事件模式解析Excel 2007(一) - XML存储

4.8 自定义行高列宽单元格

  • 标签记录了定义的每列的列属性信息
  • 标签记录了一列的列属性信息
  • 标签的customWidth属性表示该列自定义列宽
  • 标签的width属性表示该列的列宽
  • 标签的min和max属性表示范围内列的列宽,如min=”5”,max=”7”,表示第5列到第7列的列宽是相同的
  • 标签的style属性表示当前列的列样式的索引
  • 标签的hidden属性表示当前列为隐藏列
    当前自定义单元格Sheet:
    POI事件模式解析Excel 2007(一) - XML存储
    当前Sheet对应的sheet4.xml:
    POI事件模式解析Excel 2007(一) - XML存储
    当前Excel对应的styles.xml:
    POI事件模式解析Excel 2007(一) - XML存储

4.9 合并单元格

  • 合并单元格值存放在合并区域左上角单元格中
  • 标签中存放了Sheet中单元格合并信息

当前合并单元格的Sheet:
POI事件模式解析Excel 2007(一) - XML存储
当前Sheet对应的sheet5.xml:
POI事件模式解析Excel 2007(一) - XML存储

4.10 隐藏行列单元格

  • 标签的hidden表示当前列为隐藏列
  • 标签的hidden表示当前行为隐藏行

当前隐藏行列Sheet:
POI事件模式解析Excel 2007(一) - XML存储
当前Sheet对应sheet7.xml:
POI事件模式解析Excel 2007(一) - XML存储