复合文档学习笔记(一)

前言

原创:弄潮小狮

一直想要给自己的项目加上将报表所见即所得的转存为本地电子表格(Excel),从前只是想让自己的系统看起来华丽一点,就没有多大的动力去做,其实也找过一些资料,就是懒的做。

最近,终于迫于客户需求,不得不做了……

关于这个功能,网络上有不少可以直接“拿来”的,有第三方控件,也有开源代码(譬如:DW2Excel等等)。

由来,小狮我对于学习代码这种事情是相当头疼的,更主要的是,干这活属于商业行为,直接“拿来”恐怕有点问题,所以还是决定自己动手,还有一点,自己的代码,维护起来也还不至于太被动。

于是高尚一下,叫做“崇尚原创”。

在PB里面,数据窗口本来提供了Saveas方法,可以直接导出数据到Excel文件,但仅限于数据窗口的数据源,要做到“所见即所得”,那就相当困难,甚至不可能了。

在PB里面,也可以通过DDE或者OLE的方法(这一段就不抄了),直接通过Excel编写文件,达到“所见即所得”,但这又得依赖于运行环境,如果相关的机器没有安装Excel,就无法实现。

而且,我自己也用过用OLE的方法实现相关功能的系统,感受之下,对这种方法的稳定性及可操作性很不放心。

基于以上原因,为了让自己的系统更具独立性,决定从零开始,自己来。

那首先得找点资料……

网络上,有一篇流传颇广的叫做《Excel文件格式》的资料,是英文的,老实说,这篇资料对我关于“Excel文件格式”的理解,起到启蒙的作用,但是,进一步老实说,这篇资料对于我的最终工作结果,几乎起不到任何作用。

这篇被广泛如获至宝收藏的资料,是基于BIFF2的,BIFF的意思是Binary Interchange File Format(二进制交换文件格式),BIFF2版本的Excel文件并不支持“合并单元格”,这对于我的工作是个致命的打击,无法“合并单元格”,谈何“所见即所得”?

所以,我怀疑那些收藏的人,有没有认真的用过这篇资料!

当然包括我,我最早得到这篇资料至今少说也有5年了,也是到了最近实在不得不用的时候,才发现了这个问题。

这也许是人之常情,被我怀疑的同学们不必为了这个跟我急!

既然这样,那就得继续找资料了……

于是找到一篇《excelfileformat》,也是英文的,这一篇很好,从BIFF2-BIFF8,非常详尽的阐述了Excel的文件格式,老外们在这方面的态度还是比较认真的,值得学习。

但是问题又来了,仅BIFF8版本的Excel文件支持“合并单元格”!

这个问题似乎很好解决,按照BIFF8的格式来做不就行了?

当然行,是的,可以按照BIFF8的格式来做。做出来的文件也可以被Excel读取,但必须通过两次崩溃、修复后才能使用。

为什么?!

微软有一个“复合文档格式”,Office从97到2003都采用“复合文档格式”来组织文档,Word、Excel、PowerPoint等等,都采用这种格式来保存。

据说微软最新又推出另一种格式,但是问题不大,于我的工作,“复合文档”已经够用了。

“裸”的BIFF8版本的Excel文件,用Excel来打开,可能导致读写错误,进而导致崩溃,同时Excel的修复功能能够把它修复成“复合文档”。

这是我的理解。

有这样的问题,显然是不能提交给客户的。那么就必须给Excel文件“穿上”“复合文档”的外衣,要搞定Excel文件,必须先搞定复合文档。

因此,“复合文档”成了通向我的工作的第一只拦路虎(为什么说“第一只”?因为后面还有)!必须解决掉。

还得找资料……

于是又找到一篇《compdocfileformat》,与前面提到的《excelfileformat》一同出自一个叫做“OpenOffice”的组织。我想我应该谢谢他们。

值得一提的是,网上有人说这些文档的结构,微软官方并不公开,是一些黑客通过跟踪、分析等等整理出来,不知是真是假。反正很佩服这些人的毅力。

由于我的英文实在太差,有了这些英文的文档,学习起来还是很吃力,就想,会不会有中文资料?

找来找去,找到一份叫做《复合文档格式研究》的资料,作者声称是为了另一篇正在创作的《Excel文件格式研究》准备的。

我为什么没有先搜到这份并不奇怪,因为我在找“Excel文件格式”并不知道“复合文档”……

作者声称这份中文资料为其“创作”,但扫一眼就看出来这是《compdocfileformat》的翻译,而且翻译的水平跟“金山词霸”有得一拼,被人追问“记得保存过类似的资料,所以想问一下,这是你原创还是翻译?”之下,于是退缩为“说原创是不可能的,我既不是微软的工程师,也不是世界顶尖黑客。关于excel内部结构,微软是不会公开的,有关的资料也是国外一些黑客用反编译的方法推测出来的。本文是在翻译的基础上,加了一些其他的内容,但都是自己写的。”

这世道……

这篇《复合文档格式研究》倒是对我的工作起到了很大的帮助作用,我还是得谢谢作者,虽然作者对原文做了大量的删节而不是“加了一些其他的内容”,连章节引用都没改,可见确实“都是自己写的”。

资料齐了,可以动手了。

不知道是因为东西方的文化差异造成的,还是我的基础实在太差,很多地方很难懂,做的过程相当痛苦。

从开始找资料到第一个Excel文件的输出,整整花了三周的时间,折腾之下,也就有了一点心得,于是决定记录下来,那得有个地方记,于是决定重开博客。

对于复合文档,由于并非小狮原创,也谈不上“研究”,于是叫做《复合文档学习笔记》。

一向,我主张不管学术本身如何晦涩,写出来,也要尽量让毫无基础的人能够看懂。

而且我也是个很啰嗦的人,写成文字可能就相当“冗余”。

但我自己又是一个很善于遗忘的人,既然是笔记,那也要预着将来自己把相关知识忘个一干二净以后再来看能看得懂,有利于自己再学习,于是就要一如既往的“啰嗦”了。

本文基本上按照我自己的学习经过来写,重点在我认为难懂的地方阐述自己的见解。

当然,你也可以认为我是在“翻译一些资料”,但我实在不敢用“翻译”二字,问题就因为“我的英文实在太差”,英文原文可能已经很详尽了,我的这一篇也可能是“添足之笔”,但我保证这是我“自己写的”。

原文《compdocfileformat》和《excelfileformat》都是老外牛人的心血,不敢窃为己有,提供链接:

复合文档格式http://sc.openoffice.org/compdocfileformat.pdf

Excel文件格式http://sc.openoffice.org/excelfileformat.pdf

如果你只是想了解这些结构,而且基础及英文还行,看原文就可以了。

如果你想要看中文的,而且受得了我的啰嗦,那就看我的。

当然还要有耐心,这是第一篇,我很忙,第二篇什么时候写就不一定了。

但我想我会在忘了这些之前把它写完。

温馨提示: 本文最后更新于2018-09-27,至今已有2038天,某些文章具有时效性,若有错误或已失效,请在下方留言
© 版权声明
THE END
喜欢就支持一下吧❀
点赞0投币 分享
评论 抢沙发

    请登录后查看评论内容