文档介绍:关于使用iWebOffice控件打开文档失败
问题的说明
前言
在使用iWebOffice网络文档控件进行文档流转应用的过程中,有时会遇到文档无法打开的问题(这些问题有的可能是所有的机器都无法打开某个或某些文档,有的可能是部分机器无法打开某个或某些文档)。这个问题看似杂乱,其实是有规律有原因的。
问题原因阐述
进行在线编辑应用时,打开文档的操作受三方面的因素影响:文档本身、客户端的OFFICE软件环境、iWebOffice控件。这三方面任何一种发生异常都会造成打开文档失败的情况。
文档出现问题的情况
1)为什么控件中打开失败的文档在本地可以打开?
首先要说明一下,OFFICE软件自身提供了两种调用方式。一种是本地打开OFFICE软件的应用程序方式(Application,简称APP),另一种是对象连接与嵌入方式(Object Linking and Embedding,简称OLE)。iWebOffice系列控件调用OFFICE就是用的第二种方式。
这两种调用方式是微软提供的两套独立的调用模式,OLE方式下可以实现大部分APP方式下的应用(注意只是大部分),在实践中我们发现有一些接口的调用在OLE方式下是不行的。除了接口调用上的差别外,我们还发现APP的方式下稳定性明显好于OLE调用方式,我们甚至怀疑微软没有针对OLE调用方式做足够的测试。
2)为什么产生问题文档?
OFFICE稳定性差导致的最大威胁就是保存时容易产生异常文档,因为控件保存的文档本质上是通过OFFICE保存出来再由控件提交给服务器保存。而OFFICE软件也是程序在运行时也可能因为各种原因而出现问题,所以OFFICE保存出异常文档是不可避免的。
3)问题文档有哪些表现形式
这些问题文档有时可能异常的很厉害连APP方式都无法打开,这种情况可以定义为“文档损坏”,损坏一旦严重到APP方式OFFICE都不能打开时就彻底的损失了、无法再修复。有时可能是轻微的错误,这种情况可以定义为“文档异常”,APP有着更好的稳定性所以可能可以打开(并且OFFICE不会报错,所以看上去就像没有异常),而这种异常的文档
可能在OLE下就没那么幸运。因此我们有时会看到控件中无法打开的文档,但是下载到本地却可以打开,就是APP和OLE的稳定性差异导致的。
另外,也不是异常了的文档在OLE下都会无法打开,真实的情况是不同的OFFICE软件版本下都会有差异。很可能在A机器可以打开文档,在B机器就无法打开,所以要从根源上解决问题还要具体分析(分析思路之后详述)。OFFICE软件如果加上SP包后就有非常多的版本,仅从OFFICE2003开始就有:OFFICE2003、OFFICE2003 SP1、OFFICE2003 SP2、OFFICE2003 SP3、OFFICE2007、OFFICE2007 SP1、OFFICE2007 SP2、OFFICE2007 SP3、OFFICE2010、OFFICE2010 SP1。并且不同时期安装的补丁包里面的子版本号也非常众多,无法有效评估究竟哪种环境最稳定。因此最妥当的方式是修复文档(修复方法之后详述)。
OFFICE环境异常的情况
如果OFFICE文档正常,而客户端的OFFICE环境异常时(比如安装的是精简版的OFFICE,或者OFF