Office2003文件格式解惑

简介:

 

很多人会有这样的疑问,为什么新建任何一个Office文件格式初始大小永远是几k,而不是0k,既然是空的,为什么会占用空间?当初我也有这种疑问,但在研究了OLE2文档格式之后,这些疑问全部得以解开。简单的说,Office文件就是OLE2文档的一种,由于这种文档中有一些附属信息和初始结构,所以初始就是有大小的。

本文中即将提到的POIFS Browser可以到http://npoi.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=23409下载,它是基于NPOI项目的一个工具,专门用于分析OLE2文件格式。

什么是OLE2文档

OLE2文档,又叫ActiveX文档或Windows Compound File,它是一种广泛用于Windows平台上的格式,除了微软自己以外,很多第三方厂商也使用这种格式存放数据。虽然平时我们没有看到过.ole的文件格式,但确实有很多文件使用这种格式作为一种标准,只不过它的扩展名是.xls, .doc, .db等。一个更加常见的例子就是thumbs.db,几乎你可以在任何目录中看到这个隐藏文件,这个文件正如其名字所暗示的,就是用来存储缩略图的,其内部存了好多bmp或者jpg缩略文件,利用OLE2的灵活文件结构,它把每一个缩略图保存为一个记录,就像一个小型文件夹,如下图所示:

image

用POIFS Browser打开后thumbs.db,可以看到里面有4个缩略图,外加一个索引(catalog的作用纯属猜测,未经验证)。

看到这,你是不是觉得OLE2更像文件系统,确实,Windows Compound File的spec来看,这种文件格式的设计很像FAT格式。毕竟微软是做操作系统的,这方面可是微软的强项,所以那些鼓吹微软文件格式过于复杂的人,更多的是看到了表象,这也从侧面反应出了这些人的无知。

为什么.xls文件格式的初始化大小是11K

现在让我们来解开本文最初的那个疑问,之所以不是0k,是因为Office2003文件格式内部有两个默认的文档头,分别是DocumentSummaryInformation(简称DSI)和SummaryInformation(简称SI),这两个文档头中分别存储了作者(AUTHOR)、创建它的应用程序名(APPNAME)、编码页号(CODEPAGE)等信息,之所以平时我们很少关注这些信息,是因为我们很少需要这些信息,但这些信息对于文件版本管理、数据挖掘等还是很有帮助的,这也是为什么很多搜索引擎提供一些第三方文件解析器(包括OLE2文件解析器)。另外,一个默认的Excel文件通常会有三个sheet,而这三个sheet也是要占空间的,而且通常情况下里面有不少子记录。

image

上图,是按鼠标右键->属性,弹出的窗口,其中的详细信息有一部分就是来源于DSI和SI的,本文件的属性有作者、最后一次修改作者、公司、程序名称、最后一次保存日期等。

不同Office文件格式的区别

这一节,我们来分析一下不同的Office文件格式的区别,尽管使用了同样的文件结构,但是里面的内容还是很不同的。这里大家可以借助POIFS Browser来直观的了解这些文件格式,有好工具要学会利用。

Word文件格式 (.doc)

image

Word文件的内部记录比较多,有1Table(有时是0Table)、Data、WordDocument,其中WordDocument是最主要的数据记录,内部还有很多小型数据结构。CompObj是用来存储Office版本信息的,即用什么版本的Office来写的,具体数据如下:

image

虽然我们看不到其中的一些二进制数据,但基本的ASCII明文信息表明了这个结构的记录。

Excel文件格式 (.xls)

image

由于POIFS Browser能够识别Workbook记录,所以这里是用文件夹图标表示的,你可以展开它。Excel文件格式在没有VBA宏和嵌入对象的情况下是很简单的,只有Workbook和CompObj两个记录,CompObj的作用和Word文件中的是一样的,这里的Workbook存储了所有的Excel BIFF数据,内部有很多BIFF小型记录。

PowerPoint文件格式 (.ppt)

image

Viso文件格式 (.vsd)

image

 

请注意,以上这些文件包括的内容是最基本的,没有包括权限(Right Management)、VBA宏、加密等信息,所以其内部的记录只有4-5个,否则可能包括一大堆内部记录。这里限于篇幅,就不一一展开了。


附言 
如果你有兴趣参加NPOI项目开发,为中国的开源事业做一份贡献,请与我取得联系。  










本文转自 瞿杰 51CTO博客,原文链接:http://blog.51cto.com/tonyqus/1133365,如需转载请自行联系原作者
目录
相关文章
|
9月前
|
Web App开发 JavaScript 前端开发
网页VUE纯前端在线预览编辑Office,支持doc/docx、xls/xlsx、ppt/pptx、pdf等格式
随着互联网技术的不断发展,越来越多的企业开始采用在线办公模式,微软Office Word 是最好用的文档编辑工具,然而doc、docx、xls、xlsx、ppt、pptx等格式的Office文档是无法直接在浏览器中直接打开的,如果可以实现Web在线预览编辑OffIce,肯定会还带来了更高效、便捷的办公体验,为我们的工作带来了更多可能性。
1701 0
5-22|pywintypes.com_error: (-2147352567, '发生意外。', (0, 'Microsoft Office Excel', 'Excel 无法打开文件“
5-22|pywintypes.com_error: (-2147352567, '发生意外。', (0, 'Microsoft Office Excel', 'Excel 无法打开文件“
|
存储 安全
Office复合文件格式(壹)
Office复合文件格式(壹)
231 0
Office复合文件格式(壹)
|
9月前
|
前端开发 JavaScript Java
大咖与小白的日常:如何在线编辑Word/PPT/Excel等Office文件
如何利用OSS和智能媒体管理服务,实现在线预览/编辑Office文件。
181 0
office2019安装Mathtype7.4运行时错误‘53’,文件未找到:MathPage.WLL
office2019安装Mathtype7.4运行时错误‘53’,文件未找到:MathPage.WLL
587 0
office2019安装Mathtype7.4运行时错误‘53’,文件未找到:MathPage.WLL
|
前端开发 Python
Office 文件转 PDF 之服务实战
小编之前写了一篇关于 Office 文件转 PDF 的实战文章,详见Python 小技之 Office 文件转 PDF但是在平时的工作中,咱们需要通过接口的形式来调用具体的转换逻辑,同时开可以将文件转换写成服务的形式,将服务开启后传入参数或者地址即可直接调用逻辑转换,今天的文章主要讲解如何将文件转换写成服务; 一起拭目以待吧!!!
341 0
Office 文件转 PDF 之服务实战
|
Python
Python 小技之 Office 文件转 PDF
在平时的工作中,难免需要一些 小Tip 来解决工作中遇到的问题,今天的文章给大家安利一个方便快捷的小技巧,将 Office(doc/docx/ppt/pptx/xls/xlsx)文件批量或者单一文件转换为 PDF 文件。不过在做具体操作之前需要在 PC 安装好 Office,再利用 Python 的 win32com 包来实现 Office 文件的转换操作。
279 0
Confluence 6 Office 和 PDF 文件
插入一个文件到页面中是能够让你将有用的文件,电子表格,幻灯片或者其他可用的文件在你小组中进行分享的好方法。 针对所有的文件类型,你可以选择以链接方式插入一个文件。缩略图将会对文档的内容进行预览同时可以对大小进行调整。
935 0
|
C#
WPF:将Office文档、任意类型文件嵌入到EXE可执行文件中
原文:WPF:将Office文档、任意类型文件嵌入到EXE可执行文件中 版权声明:本文为博主原创文章,未经博主允许可以随意转载 https://blog.csdn.net/songqingwei1988/article/details/50259527 RT 可能这个需求比较奇怪 做了一个绿色版应用,最后只生成一个可执行的exe文件,不附带任何dll和其他文件。
1499 0
|
Java Linux Windows
java实现office文件预览
喜欢的朋友可以关注下,粉丝也缺。        不知觉就过了这个久了,继上篇java实现文件上传下载后,今天给大家分享一篇java实现的对office文件预览功能。
3675 0