13510228421
技术资料
XLS碎片另类解释
2010-10-27 12:47:42  
第一章、XLS文件和十六进制
1.1 XLS
文件和BIFF版本对照
通常我们把EXCEL的文件格式叫做BIFF,即 Binary Interchange File Format的缩写,随着EXCEL的不断升级,其文件格式BIFF也在同步的更新与完善,因此对于不同版本的EXCEL有着不同的BIFF版本,下表对EXCEL目前最常用的版本和BIFF的部分版本进行了对照。

EXCEL
版本
BIFF
版本

EXCEL 8.0
EXCEL 97
BIFF8

EXCEL 9.0
EXCEL 2000
BIFF8

EXCEL 10.0
EXCEL XP
BIFF8x

EXCEL 11.0
EXCEL 2003
BIFF8x


   
其中BIFF8xBIFF8的扩展版本,它在BIFF8的基础上改动了部分属性值。

1.2
结构知识
在介绍XLS的文件结构时,大家需要知道关于XLS二进制文件的一些基本的结构内容知识:

1
  在文件
数据的二进制存储中,低位8字节存放在地址的低位,高位8字节存放在地址的高位,因此在用十六进制编辑器来查看XLS文件时,对于一个完整的双字节,它的显示如 09 08,那么他的十六进制值应该为0x0809

2
  XLS文件中的每条完整的数据是由一个标识、长度和数据内容来体现的,如某条数据显示 09 08 02 00 00 00,那么09 08代表这条完整数据的标识,02 00代表后面内容的长度,而00 00为实际的内容数据。

3
  在数据结构中,1block的大小为512bytes,而XLS文件是由整数个block来组成的,因此其大小也均为512的倍数。

4
  XLS文件整体被分为多个子流(SubStream),这些SubStream都由若干个整数倍Block来组成的。

1.3
撰写规范
1
、对于数据内容描述的表格,均采用如下样式

Offset
Size
Content


其中

Offset
(偏移量):该偏移量是指当前数据内容开始与该段数据内容区开始的偏移值。

Size
(大小):该段数据内容区的大小

Content
(内容):该段数据内容区的部分值或是说明

2
、对于一段完整的数据区的描述方式为:

标识头+ 标识名称 + 标识说明+ 数据内容

第二章、XLS文件格式
2.1 XLS
文件框架
XLS
文件作为一个文件流(FileStream),是由多个子流(SubStream)构成的,以下的表格将XLS文件的各个SubStream按照顺序依次展现出来,其中包括了对XLS的各个SubStream的大小的说明,这样可以方便于大家对XLS文件格式有个总体的认识,同时我们由下面的各个Substream的大小可以看出,XLS文件的大小最少也为13,824 bytes

SubStream
描述

XLS Header

1 block 512 bytes),固定大小。

WorkBook

最小占8block4096 bytes

Summary Information

8block4096 bytes),固定大小。

Document Summary Information

8block4096 bytes),固定大小。

BigBlock pointer

1block512 bytes),固定大小。

RootEntry

1block512 byte s),固定大小。


      
其中WorkBook为数据变化区,它会随着文件内容的增大而增大,但始终保持Block的整数倍。

2.2 XLS Header
XLS
文件的重要部位,如下表所示,其中所列位置和值对于生成XLS文件尤为重要。

Offset
Size
Content

48
4
ROOT_START_BLOCK_POS
,指向ROOT所在Block个数

76
4
BIG_BLOCK_DEPOT_BLOCKS_POS
,指向BigBlock所在的Block个数


2.3 WorkBook
以下为WorkBook区的重要内容结构:

0x0809  Workbook Header
,即BOF,长度范围1~20

Offset
Size
Content

0
2
存放XLS文件的版本类型

BIFF8/ BIFF8X   0x0600

BIFF7           0x0500

2
2
WorkBook Globals
0x0005


0x0031  FONT
,长度24bytes

0x041E  FORMAT

0x00E0  XF Extend FORMAT

0x0293  STYLE

0x0085  BOUNDSHEET
,即Sheet指针区,NSheet则有N0x0085,包含每个Sheet的名称、sheet数据内容在xls文件中的偏移量。

Offset
Size
Content

0
4
SheetBOF的绝对位移量,相对于Workbook


0x008C  Country
,语言和地区设置。

0x00FC  SST
内容(Sharing String Table 用来存放
字符串,目的是为了让各个sheet都能够共享该SST中字符串内容)

Offset
Size
Content

0
4
数据中所有字符串的数量

4
4
将要放在SST中字符串的数量

以下开始针对每个字符串进行循环处理

8
2
该字符串的长度,若为双字节字符也算做一个

10
1
字符串中若包含双字节字符(如中文),则为0x01,若为纯ASCII字符,则为0x00

11
n
存放字符串信息


0x00FF  Extended SST
内容

     
在读取XLS文件时显得不重要,但当创建XLS文件时却非常重要

Offset
Size
Content

0
2
每一区块字符串的个数,其值>=8

以下开始针对每一区块字符串进行循环处理

2
4
每一区块第一个字符的绝对位置

6
2
每一区块第一个字符的相对位置

8
2
保留


0x0809  Sheet1
内容

     0x0809  Header
20 bytes

     0x020B  Index
16+4*N个字节

Offset
Size
Content

0
4
保留

4
4
第一行的序号

8
4
最后一行的序号(OpenOffice上介绍是sheet结尾的第一个未使用行的序号,行数的基数按0开始)

10
4
指向DEFCOLWIDTH0x0055)相对于Workbook Header的位置

14
4*N
指向DBCELL0x00D7)相对于Workbook Header的位置,当存在多个DBCELL时,需要设置多个。

N
为该sheet的行数/32













0x0055  DEFCOLWIDTH
6 bytes

0x0200  Dimensions
18 byte,存放sheet1的行数和列数。

Offset
Size
Content

0
4
第一行的序号

4
4
最后一行的序号

8
2
第一列的序号

10
2
最后一列的序号

12
2
保留


Row Block

     0x0208  Row
20 bytesSheet中有多少行就有对应多少个0x0208开头的行信息,如果sheet中有5行,那么Row Block的大小就是20*5 bytes

Offset
Size
Content

0
2
行的序号

2
2
列的序号


     Cell Block     
设置sheet中每一个单元格的信息,顺序为针对每一行的每一列依次设置,如00, 01, 02 ……10, 11, 12 ……20, 21, 22……

          0x00FD  LABELSST
14bytes,针对字符串值已经在SST中保存,这里只保存其对应的序号。

          0x027E  RK2
14bytes,针对RK值(指编过码的整型或浮点型值)

          0x00BD  MULRK
28 bytes

     0x00D7  DBCELL
,随着行数的变化而发生变化。

Offset
Size
Content

0
4
DBCELL
的偏移量减去Row Block中第一个Row的偏移量

4
2
Cell Block
中首行的第一个Cell的偏移量减去Row Block中第二个Row的偏移量

以下为循环处理部分,1<n<=Max_Row

6
2
Cell Block
中第n行的第一个Cell的偏移量减去第n-1行的第一个Cell的偏移量


XLS中的行数大于32时,
系统将循环处理,对于每个32行内容单独生成Row BlockCell BlockDBCELL

0x0809   Sheet2
内容

0x0809   Sheet3
内容 (如果有Sheet2Sheet3

0x000A   EOF
Workbook结束标示符

2.4 Summary Information
属性,如作者,工作表类型等Excel中点击文件〉属性的部分内容存放在此。

2.5 Document Summary Information
文档的属性,具体存放的内容大家可以研究研究。

2.6 BigBlock Pointer
每四个字节存放一个bigBlockChain

2.7 Root Entry
文件结尾部分,其中对几个substream进行了描述,每个substream的描述占128个字节。

Offset
Size
Content

0
128
存放文件中Root Entry属性 地址和大小

128
128
Workbook
属性,地址和大小,占有实际数据的内容

256
128
SummaryInformation
属性,地址和大小

384
128
DocumentSummaryInformation
的属性,地址和大小


针对每个128字节内容,其偏移量116后的4个字节为每个区块的开始位置,之后的4个字节为每个区块的大小,地址和大小数据会随着内容量的变化而发生变化。
[Print]  [Close]  

7x24小时服务  QQ 1186505712 Email 1186505712@qq.com  TEL  13510228421   陈工   
         本站所有资源版权归深圳市极佳电脑技术服务有限公司,禁止克隆本站,抄袭本站文章等侵权行为,否则我们必将追究其法律责任! 

地址:深圳市龙华区中海汇德理花园2栋1单元1903
copyright 2008-2022 极佳数据 ( SQL110.com ) All rights reserved 粤ICP备17000871号

在线解答
QQ762862548
在线解答
QQ1186505712
在线解答
QQ254897536
在线解答
在线解答
在线解答