如何在Web页面上直接打开、编辑、创建Office文档


Posted in Javascript onMarch 12, 2007

如何在Web页面上直接打开、编辑、创建Office文档 
有朋友询问如何在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。

Javascript 相关文章推荐
JavaScript实现列出数组中最长的连续数
Dec 29 Javascript
jQuery仿gmail实现fixed布局的方法
May 27 Javascript
Jquery实现瀑布流布局(备有详细注释)
Jul 31 Javascript
JQUERY表单暂存功能插件分享
Feb 23 Javascript
Bootstrap3下拉菜单的实现
Feb 22 Javascript
详解JS获取HTML DOM元素的8种方法
Jun 17 Javascript
laydate 显示结束时间不小于开始时间的实例
Aug 11 Javascript
React diff算法的实现示例
Apr 20 Javascript
说说Vuex的getters属性的具体用法
Apr 15 Javascript
解决vue组件销毁之后计时器继续执行的问题
Jul 21 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
Aug 14 Javascript
JS实现鼠标移动拖尾
Dec 27 Javascript
(function(){})()的用法与优点
Mar 11 #Javascript
可以文本显示的公告栏的js代码
Mar 11 #Javascript
简单三步,搞掂内存泄漏
Mar 10 #Javascript
如何简单地用YUI做JavaScript动画
Mar 10 #Javascript
可缩放Reloaded-一个针对可缩放元素的复用组件
Mar 10 #Javascript
为Yahoo! UI Extensions Grid增加内置的可编辑器
Mar 10 #Javascript
Gird事件机制初级读本
Mar 10 #Javascript
You might like
php分页示例代码
2007/03/19 PHP
PHP控制网页过期时间的代码
2008/09/28 PHP
PHP mcrypt可逆加密算法分析
2011/07/19 PHP
php对二维数组按指定键值key排序示例代码
2013/11/26 PHP
将php数组输出html表格的方法
2014/02/24 PHP
PHP入门之常量简介和系统常量
2014/05/12 PHP
PHP7匿名类用法分析
2016/09/26 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
基于JQuery的密码强度验证代码
2010/03/01 Javascript
ExtJS DOM元素操作经验分享
2013/08/28 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
vue2.0父子组件及非父子组件之间的通信方法
2017/01/21 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
对Angular中单向数据流的深入理解
2018/03/31 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
使用webpack构建应用的方法步骤
2019/03/04 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
给Python初学者的一些编程技巧
2015/04/03 Python
python计算时间差的方法
2015/05/20 Python
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
python中多个装饰器的调用顺序详解
2019/07/16 Python
windows下Python安装、使用教程和Notepad++的使用教程
2019/10/06 Python
英国最大的在线蜡烛商店:Candles Direct
2019/03/26 全球购物
会计电算化专业毕业生自荐信
2013/12/20 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
2014年财政工作总结
2014/12/10 职场文书
先进集体申报材料
2014/12/25 职场文书
个人年终总结结尾
2015/03/06 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书
2016年优秀党员教师先进事迹材料
2016/02/29 职场文书
《中国机长》观后感:敬畏生命,敬畏职责
2019/11/12 职场文书
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python