什么是 .XLSB 文件?
XLSB 文件格式指定 Excel 二进制文件格式,它是指定 Excel 工作簿内容的记录和结构的集合。内容可以包括数字、文本或数字和文本的非结构化或半结构化表格、公式、外部数据连接、图表和图像。与 XLSX(基于 Open XML 文件格式)不同,XLSB 表示二进制 Excel 工作簿文件。可以更快地读取和写入 XLSB 文件,这使得它们对于处理大文件很有用。 XLSB 很少用于存储工作簿,因为 XLSX(以及以前的 XLS)是最常见的用户选择的用于保存工作簿的文件格式。可以用Microsoft Office 2007及以上版本打开。
XLSB 文件格式规范
XLSB 文件格式的文件格式规范于 2008 年作为 1.0 版公开。从那时起,该规范已多次修订,最新版本的规范(v 10.0)于 2018 年 4 月发布。该规范由微软公开提供为 [[MS-XLSB] - Excel 二进制文件格式规范](https:// /msdn.microsoft.com/en-us/library/cc313133(v#office.12).aspx),任何人都应该咨询以读取或写入 XLSB 文件格式的文件。
XLSB 文件结构
XLSB 文件是由一组部件组成的包。这些部分包含有关工作簿内容的信息,包括工作簿数据和包的结构。有些部分包含使用二进制记录存储的信息,有些是 XML,而其他部分包含存储为二进制字节流的信息。每个二进制记录都包含零个或多个包含工作簿数据的结构化字段。
#### 包裹 ####
XLSB 包是一个 ZIP 存档,它必须只包含一个工作簿部分。此部分必须是此包关系部分中关系的目标。工作簿部分是 XLSB 文档中的起始部分。
#### 部分 ####
部分是具有关联内容类型的字节流,该内容类型指定存储在该部分中的内容的性质和类型。一些部分以二进制格式存储信息,而另一些部分以 XML 格式存储信息。规范文档的 parts enumeration 部分列出了有效的部分、内容类型以及它们之间的必需/可选关系一个包中的所有部件。
#### 关系 ####
源和目标资源通过关系连接。关系可以是:
包关系: 其中target为part,source为包整体
**零件到零件的关系:**其中目标是零件,源是包中的零件
**显式关系:**通过引用关系元素的 ID 属性值从源部分的内容中引用资源
隐式关系是不显式的关系
**内部关系:**其中目标是包中的一部分
**外部关系:**其中目标是不在包中的外部资源
#### 记录 ####
记录是用于在工作簿中存储有关要素信息的基本构建块。每个二进制记录都是一个可变长度的字节序列。二进制记录由三个部分组成:
- 记录类型
- 记录大小,以及
- 特定于该记录类型的记录数据。
**记录类型:**记录类型显示记录指定的记录类型。它还指定了特定于该记录的记录数据的结构。有效的记录类型列在规范文档的 记录枚举 部分中。记录类型必须为 1 或 2 字节,且必须大于等于 128 且小于 16384。
记录大小: 记录大小指定指定记录数据总大小的字节数。这个值必须是一到四个字节。如果低字节中的高位等于 0,则该值必须是一个字节;否则,该值必须大于一个字节。如果字节数大于一个字节,则每个连续字节中的高位指定是否使用附加字节。如果第二个字节的高位等于 1,那么这个值必须使用额外的第三个字节。如果第三个字节的高位等于 1,那么这个值必须使用额外的第四个字节。第四个字节的高位必须被忽略。该值由每个字节的七个低位组合而成。低位、最低有效位包含在第一个字节中,并且每个后续字节都包含比前一个字节更高的位。
记录数据: 记录数据组件包含与特定记录类型相对应的字段,并构成记录的其余部分。 Record Enumeration 中列出的给定记录类型的字段顺序和结构在 Records 中该记录类型的相应部分中指定。记录数据组件的总大小必须等于记录大小。记录数据组件中的字段可以包含简单值、值数组、多个字段的结构、字段数组和结构数组。
XLSB 记录示例####
以下记录类型和记录大小指定了一条大小为 200 字节的 BrtCommentText 记录:
11111101 00000100 11001000 00000001 [记录字段]
第一个字节是 11111101,指定低值 125 并且记录类型需要第二个字节。第二个字节为 00000100,指定高值 4 * 128,等于 512。记录类型值为 125 + 512,即 637,对应于 BrtCommentText 记录类型。下一个字节是 11001000,指定低值 72 并且记录大小需要第二个字节。第二个字节是 00000001,指定更高的值 1 * 128 并且记录大小不需要额外的字节。记录大小为 72 + 128 或 200,它指定记录数据组件的总大小(以字节为单位)。记录数据组件中的字段由 BrtCommentText 指定。