互联网技术 · 2024年2月7日 0

Microsoft文档文件损坏,如何修复?

Microsoft文档是Microsoft公司的一个文件处理程序生成的文件格式。Microsoft文档在我们的工作生活中运用的非常广泛,因为它属于电子数据中的一类,所以也就具有电子数据的特性:无形性、多样性、真实性、易破坏性。因为其具有易破坏性,所以针对Microsoft文档文件的修复是本文所要论述的内容。

任何文档文件的修复都需要先了解其文档结构,针对Microsoft文档的文件结构,我们分为两类来讨论:

◆其中一类是DOC/XLS/PPT,是Microsoft office 2007及之前的版本使用的文件格式,它们是复合文档,文件中包含文字、图片、电子表格数据、声音、视频图像以及其他信息。

◆另一类是DOCX/XLSX/PPTX,它们是Microsoft office 2007之后版本使用的文件格式,是基于office Open XML标准的压缩文件格式,其中也包含文字、图片、电子表格数据、声音、视频图像等复合信息,但是它与复合文档不同之处在于,所有的文件信息都是基于XML文件进行存储之后,再对于所有的文件数据进行压缩处理。

复合文档

(DOC/XLS/PPT)

Microsoft文档文件损坏,如何修复?

1.复合文档概述

复合文档( Compound Document ) 是一种不仅包含文本而且包括图形、电子表格数据、声音、视频图象以及其它信息的文档。可以把复合文档想象成一个所有者,它装着文本、图形以及多媒体信息如声音和图象。目前建立复合文档的趋势是使用面向对象技术,在这里,非标准信息如图像和声音可以作为独立的、自包含式对象包含在文档中。Document、Excel、PowerPoint等都是用这种格式存储的。

复合文档的原理就像一个文件系统(文件系统:如 FAT 与 NTFS )。复合文档将数据分成许多流( Streams ),这些流又存储在不同的仓库( Storages )里。将复合文档想象成你的 D 盘, D 盘用的是 NTFS ( NT File System )格式,流就相当于 D 盘里的文件,仓库就相当于 D 盘里的文件夹。

流和仓库的命名规则与文件系统相似,同一个仓库下的流及仓库不能重名,不同仓库下可以有同名的流。每个复合文档都有一个根仓库( root storage )。如图1所示:

Microsoft文档文件损坏,如何修复?

图1复合文档仓库和流结构的关系

复合文档中所有的流又分成更小的数据块,叫做数据扇区(sectors)。Sectors可能包含控制数据或用户数据。整个文件由一个头( Header )结构以及其后的所有 Sectors 组成。Sectors 的大小在头中确定,且每个 Sectors 的大小都相同,如图2所示:

Microsoft文档文件损坏,如何修复?

图2 复合文档sectors结构

2.lDOC文档结构

复合文档以sectors为基本单位对文件数据进行管理,如图2所示第一个数据扇区HEADER至关重要,其中存储了管理文件扇区内容的配置表信息,以及文件相关属性描述信息。整个文件的数据内容均是以HEADER数据扇区的内容为基础进行存储管理的。若该扇区被破坏,则会导致文件内容无法正常打开使用。而关于复合文档基于结构的文件修复方案,也是基于HEADER数据扇区管理的所有扇区内容展开的。

在复合文档中涉及多种扇区配置表的概念,其中包含三类扇区配置表:

一是主扇区配置表MSAT,管理文档所有用来存放扇区配置表的扇区数。

二是短扇区配置表SSAT,管理文档中小于指定流大小的短流扇区数。

三是扇区配置表SAT,管理所有用户流(短流除外)和内部控制流的扇区数。在复合文档中扇区数通过SID来表示,一个配置表就是一个SID链。

以doc文档为例说明复合文档基于结构的修复方案:

Doc文档的存储结构,如图3所示:

Microsoft文档文件损坏,如何修复?

图3 doc文档存储结构

图3中各部分结构在任一doc文档中并不一定按照该顺序存储,如图3中doc文档包含各部分的存储顺序和数据扇区排列方式,是以Root Entry为入口,构建一个独立的红黑树(red-black tree),而图3中各部分在doc文档中的存储顺序就是以红黑树中各部分的节点描述信息进行排列存储的。

图3中各部分存储的内容介绍如表所示:

Microsoft文档文件损坏,如何修复?

3.复合文档修复方案

Microsoft文档文件损坏,如何修复?

图4 复合文档修复方案

复合文档文件修复方案有两种,一是基于扇区结构的修复方案,二是基于流数据的修复方案。

基于扇区结构的修复方案:

1、HEADER扇区受损

根据HEADER扇区的固定结构,对HEADER扇区中缺失或错误的字段内容进行修改处理,确保HEADER扇区的内容能够与文档的配置表信息、文档属性描述信息、文档扇区大小等信息正确对应。

HEADER扇区的数据内容结构如图5所示。

Microsoft文档文件损坏,如何修复?

图5 HEADER扇区

2、内部控制流扇区受损

内部控制流扇区一般指的是文档的配置表扇区内容被破坏,包括SAT、SSAT、MSAT这三类配置表扇区内包含的SID值与文档的实际情况不能一一的对应起来,则需要结合HEADER扇区和文档实际扇区内容的情况,对文档中所有的扇区进行解析,判断每个扇区内数据结构对内部控制流扇区进行修改处理,从而重新生成修复完成后的复合文档。

3、用户数据流扇区受损

用户数据流扇区一般指的是在生成文件时,因用户对文档的增删改等操作而改变的文档中存储的数据流扇区被破坏的情况下,对这部分扇区内容进行修复处理。对于这部分数据,则需要结合图3中描述的文件结构来确定文档中存储这些结构的扇区位置,然后判断是其中的哪些结构错误或缺失造成文件被破坏,再针对被破坏结构结合其中存储的固定信息内容进行修复处理。

基于流数据的修复方案:

对于基于流数据的修复方案,针对的是复合文档中基本的扇区结构已经被完全破坏,不能通过文档的扇区配置表以及目录数据流对文档的内容按照图3的结构进行判断处理的情况。

结合复合文档的概念,因为复合文档中存储的内容可能有文字、图片、视频、声音等类型的数据。而这些数据存储在文档中并没有进行再压缩操作,基于流数据的修复方案,就是利用这一点,针对文档中可能存在的不同类型的数据,按照这些类型的数据本身具备的数据结构特点,对文档进行逐字节解析判断。

图片、视频、声音这类的数据因其数据格式都有其固定的结构和标识,在对文档内容进行解析判断时,可结合这类型数据的结构特点进行分析判断。若满足这类数据的结构特点,则提取出来结合这类数据的结构重新保存生成新的文件;若不是,则判断这部分数据是否为文档的内部控制流数据或目录数据流,若都不是,则这部分数据为复合文档的文字数据,并将其提取出来保存为文本文件。

通过基于流数据修复方案修复完成的文档,会将修复出来的数据内容,按照其存储内容的数据类型进行分类保存。基于流数据的修复方案的流程图,如图6所示:

Microsoft文档文件损坏,如何修复?

图6 基于流数据的修复方案流程图

基于office Open XML标准压缩文件

(DOCX/XLSX/PPTX)

1.基于office Open XML标准压缩文件概念

基于office Open XML标准压缩文件本质上是一个ZIP压缩文件。它在结构上完全可以将其看做一个ZIP文件,但是它同时也具备特定的文件目录结构。所以它与其他的ZIP文件不同之处在于,基于office Open XML标准压缩文件解压后包含的文件目录结构具有特定的含义。

2.DOCX文档结构

以DOCX文档为例,DOCX有三个主要的组成部分:部件、内容类型和部件关系。针对这三个组成部分进行详细介绍如下:

A、部件:对应于DOCX文档解压后的一个个文件。这些文件都是包中的文档部件。

表2 Docx文档部件

Microsoft文档文件损坏,如何修复?

基于office Open XML标准压缩文件(DOCX/XLSX/PPTX)使用单独的文件(xml)来表示文档中的每个部分以及附加的内容。它们需要依赖于各部件之间的正确关系保证文件的完整和有效性,如果可以准确保持部件之间的关系,那么文件结构可以任意更改。以DOCX文档为例,它的open xml目录结构如图7所示:

Microsoft文档文件损坏,如何修复?

图7 DOCX文档open xml的文件目录结构

如图7所示,一个文档则是由一个文件夹(或者说容器),由内部的部件各自定义属性和数据,并相互依赖而产生的。一个文件可能会包含这些目录和组件,关于各个文件目录的关系描述如表3所示:

表3 DOCX文档open xml的文件目录内容描述

Microsoft文档文件损坏,如何修复?

B、内容类型

每个文档部件都有一个特定的内容类型。一个部件的内容类型描述了这种文件类型的内容。例如,XML部件包含了Word XML格式定义的标记,而内容类型可以用来