标 题: Office Open XML 文件格式的一点认识
作 者: youstar
时 间: 2009-12-13,1:30
   原来一直没怎么研究过这个,这两天看了下Office Open XML 文件格式,自己做了点笔记,分享给大家,水平确实很低,高手飘过,欢迎大家讨论Office Open XML 的安全性问题。
 
一、XML的引入
office2007以前的存储格式为二进制文件(.doc,.dot,.xls,以及.ppt文件),在过去几年中一直肩负着存储和转换数据的重任,而现在它们无法满足新的市场需求的挑战,其中包括轻松地在异构应用之间传递数据,以及允许用户从这些数据中搜集商业信息。而XML从20世纪90年代出现,企业计算客户开始逐渐认识到,在他们所依赖的计算机产品和应用中采用开放的格式和标准所带来的商业价值。IT专业人员将从通用的数据格式中受益匪浅,这种格式可能是XML,因为它拥有被应用程序、平台和Internet浏览器读取的能力。因此微软在office2007以后就转向了XML。2007 Microsoft Office system为Microsoft Office Excel 2007,Microsoft Office Word 2007,和Microsoft Office PowerPoint 2007采用了基于XML的文件格式,从而延续了这种转移。新的文件格式,称为Office Open XML格式,简称为OOXML。
    同时微软在2008年在反对的声音中通过了OOXML格式成为国际化标准,谷歌等包括很多国家和机构都对此不满。
二、Office Open XML的优点
  1.压缩文件
Office Open XML文件会自动压缩,某些情况下最多可缩小75%。Office Open XML使用zip压缩技术来存储文档, 
2.改进了受损文件的恢复
使用Office Open XML格式保存的文档不是二进制格式,而是使用文本格式以一定的XML结构以模块形式进行组织,从而使文件中的不同数据组件彼此分隔。这样,即使文件中的某个组件(例如,图表或表格)受到损坏,文件本身还是可以打开。
3.易于检测到包含宏的文档
根据工作簿是否包含宏,在保存工作簿时文件的扩展名也有所不同。无宏的工作簿扩展名为".xlsx",包含宏的工作簿扩展名为".xlsm"。这样,通过工作簿名称即可知道文件是否包含宏代码。
4.更好的隐私保护和更强有力的个人信息控制
可以采用保密方式共享文档,因为使用文档检查器可以轻松地识别和删除个人身份信息和业务敏感信息,例如,作者姓名、批注、修订和文件路径。
5.更好的业务数据集成性和互操作性
将Office Open XML作为Office 2007发布版产品集的数据互操作性框架意味着:文档、工作表、演示文稿和表单都可以采用XML文件格式保存,任何人都可免费使用该文件格式并获得该文件格式的许可证,而不必支付版权费。
6.向后兼容性
Office Open XML是向后兼容的,它可以兼容早期的版本。
三、office2007 的格式
为了打开一个Word 2007 XML文件的步骤
1.  创建一个临时目录来存储文件和它的部件。
2.  创建一个Word 2007文档,包括文本,图片以及其它元素,保存为一个.docx文件。
3.  在文件名的末端添加一个.zip扩展名。
4.  双击文件,将会在ZIP应用程序当中打开该文件。可以查看组成文件的每个部件。
5.  将这些部件提取到刚才创建的临时目录当中。
2007版本的文件格式容器入下图,这个结构我们在下面就来研究下。

四、office 2007的一点研究
下面我们对office2007的结构进行分析。以test.doc为例,首先将后缀改为.zip然后解压

分析如下:
  _rels文件夹:里面有一个文件(_rels.xml),.rels文件,它定义了包中的根关系。它是在解析整个包时首先要浏览的第一个文件。
源码如下:

代码:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2"
Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/><Relationship Id="rId1"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/></Relationships>
其中有三个关系属性:Id为任意字符串,在.rels文件中必须是唯一的;Type表示关系的类型;Target指定包含关系的目标的文件夹和文件。
  docProps文件夹:包含两个文件(app.xml和core.xml)。
app.xml:
代码:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><Template>Normal_Wordconv.dotm</Template><TotalTime>1</TotalTime><Pages>1</Pages><Words>10</Words><Characters>57</Characters><Application>Microsoft Office Outlook</Application><DocSecurity>0</DocSecurity><Lines>0</Lines><Paragraphs>0</Paragraphs><ScaleCrop>false</ScaleCrop><Company>youstars</Company><LinksUpToDate>false</LinksUpToDate><CharactersWithSpaces>0</CharactersWithSpaces><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>12.0000</AppVersion></Properties>
core.xml:
代码:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:dcterms="http://purl.org/dc/terms/"xmlns:dcmitype="http://purl.org/dc/dcmitype/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dc:title></dc:title><dc:subject></dc:subject><dc:creator>youstar</dc:creator><cp:keywords></cp:keywords><dc:description></dc:description><cp:lastModifiedBy>youstar</cp:lastModifiedBy><cp:revision>3</cp:revision><dcterms:created
 xsi:type="dcterms:W3CDTF">2009-12-12T15:58:00Z</dcterms:created><dcterms:modified
xsi:type="dcterms:W3CDTF">2009-12-12T15:59:00Z</dcterms:modified></cp:coreProperties>
包含各种XML文件,描述文件属性和应用程序设置。这些文件包含着文件的属性信息,例如创建者的名字、修改的和创建的日期。
  word文件夹:

包含文件的核心部分。
1.  _rels:各部分关系文件 
2.  media:文档中的图片文件 
3.  theme:主题的XML文件 
4.  document.xml:文档里面的一些结构
5.  fontTable.xml:文档字体设置文件
6.  settings.xml:文件的一些配置吧
7.  styles.xml:有关文档中样式的信息,例如字体大小,表格样式,和列表样式等
8.  webSettings.xml:没看清楚….
  [Content_Types].xml文件:包含在我中的其它部件提供了一个内容类型的列表。内容类型可以定义为部件的类型,它们可以存储在一个包中。
说明:自己只是简单的看了看,做了下笔记,作为分享。

更多资料见:
1、官网讲解http://www.microsoft.com/china/msdn/....mspx?mfr=true
2、office格式全套资料(OfficeFileFormatsProtocols.zip)
下载地址:http://download.microsoft.com/downlo...sProtocols.zip


本文所用的测试文件下载:Project.rar