有朋友询问如何在Web页面上做到像SharePoint中的效果一样,能直接激活客户端的Word来打开.doc文件,而不是类似直接点击.doc文档链接时Word在IE中被打开那样。想想这个问题应该很多人都会感兴趣,所以干脆写一篇blog来大致描述一下方法。
在安装Office2003以后,有一个ActiveX控件被安装到了系统中,这个控件位于“Program Files\Microsoft Office\OFFICE11\owssupp.dll”。通过这个控件,客户端页面上的JavaScript就可以激活本地的Office软件,来实 现打开、编辑Office文档。(另,Office XP应该就已经包含这个ActiveX控件了。)
首先,用Script创建一个本地的对象:
openDocObj = new ActiveXObject(”SharePoint.OpenDocuments.2″); // 为了兼容Office XP,可以创建“SharePoint.OpenDocuments.1”
然后,调用openDocObj的相应的方法。比如打开服务器上的一个Office文档:
openDocObj.ViewDocument(”http://www.abc.com/documents/sample.doc”);
openDocObj对象会根据参数中不同的Office文档类型(.doc、.xls、.ppt)来打开不同的程序(Word、Excel、PowerPoint)。ViewDocument()方法还有一个重载签名,可以让我们手工指定激活哪个程序来打开文档:
openDocObj.ViewDocument(”http://www.abc.com/documents/sample.doc“, 要激活的程序的ProgID);
那么要打开Office程序在线编辑文件又如何?
openDocObj.EditDocument(”http://www.abc.com/documents/sample.doc“);
就可以直接激活Word,在Word里面编辑文档,然后直接点击Word里面的保存功能,就可以将文件保存会服务器上了。注意:为了让Word能将 编辑后的文档直接保存会服务器,访问Web站点的当前上下文的Windows Identity必须对服务器的相应目录(即“http://www.abc.com/documents”这个虚拟目录所对应的服务器上的物理路径)有 相应的写权限,否则保存动作会失败。编辑完成后,EditDocument()会返回一个bool值,来反映编辑操作是否成功。
我们还可以通过打开服务器上的一个文档模版,来创建一个新的文档:
openDocObj.CreateNewDocument(”http://www.abc.com/documents/sampleTemplate.dot“, “http://www.abc.com/documents/“);
就可以使用“http://www.abc.com/documents/sampleTemplate.dot”这个模版来创建一个新的文档,默 认新文档的保存地点是“http://www.abc.com/documents/”。创建新文档时使用的程序取决于模版文件的类型(比如.dot模版 会对应Word)。新文档的保存同样需要注意权限问题。CreateNewDocument()方法同样会返回一个bool值来反映操作是否成功。
CreateNewDocument()方法的第一个参数,除了可以使用一个模版的地址外,还可以直接指定为希望用来创建新文档的客户端程序的ProgID。
法国电影《两小无猜》 的插曲
Des yeux qui font baiser les miens 他的双唇吻我的眼
Un rire qui se perd sur sa bouche 嘴边掠过他的笑影
Voila le portrait sans retouche 这就是他最初的形象
De l’homme auquel j’appartiens 这个男人,我属于他
Quand il me prend dans ses bras 当他拥我入怀
Je vois la vie en rose 我看见玫瑰色的人生
ll me dit des mots d’amour 他对我说爱的言语
Des mots de tous les jours 天天有说不完的情话
Et ca me fait quelque chose 这对我来说可不一般
ll est entre dans mon coeur 一股幸福的暖流
Une part de bonheur 流进我心扉
Dont je connais la cause 我清楚它来自何方
C’est lui pour moi 这就是你为了我
Moi pour lui 我为了你
Dans la vie 在生命长河里
ll me l’a dit,l’a jure 他对我这样说,这样起誓
Pour la vie 以他的生命
Des que je l’apercois 当我一想到这些
Alors je me sens en moi 我便感觉到体内
Mon coeur qui bat 心在跳跃
Des nuits d’amour plus finir 爱的夜永不终结
Un grand bonheur qui prend sa place 幸福悠长代替黑夜
Les ennuis,les chagrins trepassent 烦恼忧伤全部消失
Heureux,heureux a en mourir 幸福,幸福一生直到死
Therefore do not worry about tomorrow, for tomorrow will worry about itself. Each day has enough trouble of its own.
所以不要为明天忧虑。因为明天自有明天的忧虑。一天的难处一天当就够了。
<马太福音>