关于与M$ office的兼容性

OOo,TeX,KO,ABI,GIMP,Picasa,ProE,QCAD,Inkscape,Kicad,Eagle
回复
homtoo
帖子: 311
注册时间: 2006-12-06 11:52
联系:

关于与M$ office的兼容性

#1

帖子 homtoo » 2019-06-09 10:49

用libreoffice(以前是OOo),感觉大家总是问libreoffice的兼容性,其实不应该,因为只要大家都遵守规范就行了。可是人家通过商业推广已经是工业标准了,所以只好迁就它。问题是它不老实。IE就不遵守W3C规范,所以firefox就很艰难。回到office上,libreoffice已经发展这么多年了,每次M$ office一有新版本,新版本的文档用libreoffice打开就有麻烦了。今天看到知乎上有人说了这事,坐实了。
微软在Office Open XML夹了多少私货?
Felix 写了:曾经参与过 LibreOffice 导入导出微软 OOXML 文档功能的开发,因此有一点了解。

OOXML 本身夹带了多少私货姑且不表。想指出的是:微软自家 MS Office 的实现和 OOXML 文档规范不是完全一致的。

举个修过的小 bug 为例:一个在 MS Office 里创建的图形,在 LibreOffice 里不能正确显示。尽管 LibreOffice 已经按照 OOXML 规范实现了这部分功能的代码。

后来调试发现 MS Office 输出这个图形时某个关键标志位的值就不是按照 OOXML 规范来的。最后为了兼容 MS Office,也只能将 LibreOffice 的实现做相应的(反规范)修改。
回想起来实在是坑。
LiTuX 写了:这个问题很大,作为一个非业内人士,虽然我了解过一点 OOXML,但远远不够给出这个问题的完整答案来,所以这个回答躺在草稿箱多日,总觉得就这么发出来还是不够,可惜我暂时没办法再补充得更加完美了。

OOXML 的标准已经相当细致的规定了各级标签、结构、以及它们的关系,不论图片还是 OLE,OOXML 中都找得到它们的具体描述。当然 OLE 的主要问题是,针对对象具体的操作,这个不归 Office 管。VBA 也好,域也好,接口也都是充分暴露出来了,随便你怎么玩都行。

要说私货,在标准中夹带私货那也已经不叫私货了(嗯!那就该叫标准),所以只是从标准的层面来讲,没有。但是呢,这东西就跟 C/C++ 编译器啊、JS 引擎啊的类似,标准只告诉你什么是什么,但不负责你如何实现。你可以说因为微软 Office 中已经存在了实现这种功能的模块,刚好把这些东西也放在了标准中,于是这个功能微软可以做的很好但是别人可能做不好,但那也不叫私货,——标准已经在那儿了,我的实现没有开放,你可以自己想办法实现一个嘛(虽然很可能你实现不出来)!

话虽如此,以我对 OOXML 有限的了解,却不得不说一些标准之外的事实。事实上,OOXML 的标准放在这儿,仍然很难有人能够将 OOXML 做的与 MS Office 完全兼容。OOXML 的标准不同于 pdf 标准,它没有具体规定在我们遇到这样的一个元素、它的属性如何如何时,这个元素应该具体如何精确、精准的呈现在屏幕或者显示在页面,所以,即使是完全相同的文档内容,在实现上的些微差别,就会使得渲染效果发生特别大的变化。所以虽然 OOXML 是开放的标准,WPS 也好 LibreOffice 也好,是的可以做到没有困难的解析、存储 OOXML 格式的文档,但却无法把渲染效果做的跟 MS Office 完全一致。甚至于对 MS Office 自身而言,不同版本、不同平台上的软件对同一个文档的渲染效果,也可能或多或少存在一些差异。
如果说 OOXML 已经公开的文档格式标准,我们可以说微软没有夹带多少私货;但事实上,OOXML 已经不仅仅是文档格式标准了,很多时候,我们默认 MS Office 的渲染效果才是“标准”的结果……如果非要说微软在 OOXML 里面有私货,我认为那应该就是微软对 OOXML 的默认渲染,算是这个“标准”中掺杂的私货了。
回复