微软的Excel格式有两种:.xls和.xlsx。Excel2003及之前的版本是.xls格式,从Excel2007开始支持.xlsx格式。只使用基本功能的话两种格式看起来并没有多大差别,但是两者文件格式确实截然不同的。
excel97-2003(xls格式)
XLS文件最为一个文件流(FileStream),是由多个子流(SubStream)构成的,下面这张图是将各个SubStream按顺序依次展现出来,这些SubStream都是有若干个整数倍Block(1 block = 512 bytes)组成。
SubStream
XLS Header
占1个block(512bytes)固定大小
WorkBook
最小占8个block(4096bytes)
Summary Information
占8个block(4096bytes)固定大小
Document Summary Information
占8个block(4096bytes)固定大小
XLS Header扩展区
只有.xls文件超过一定大小时,才会出现
BigBolck pointer
最小占1个(512bytes)
RootEntry
占1个block(512bytes)
其中所有单元格数据记录在WorkBook子流中,以下为WorkBook区的重要内容结构。
0x0809 WorkbookHeader,即BOF,长度范围1~20
offset
size
content
0
2
存放XLS文件的版本类型 BIFF8/BIFF8X 0x0600 BIFF7 0x0500
2
2
WorkBookGlobals,0x0005
0x0031 FONT,长度24bytes。0x041EFORMAT
0x00E0 XF ExtendFORMAT
0x0293 STYLE
0x0085 BOUNDSHEET,即Sheet指针区,N个Sheet则有N个0x0085,包含每个Sheet的名称、sheet数据内容在xls文件中的偏移量。
offset
size
content
0
2
数据段长度(Sheet指针区和名称区长度)
2
4
该Sheet的BOF的绝对位移量,相对于Workbook
6
Sheet名称区,长度为数据段长度-2
0x008C Country,语言和地区设置。
0x00FC SST内容(SharingStringTable用来存放字符串,目的是为了让各个sheet都能够共享该SST中字符串内容)(Excel表数据,所有Sheet数据均放于此)
offset
size
content
0