如何在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入门教程(11) js事件处理
Jan 31 Javascript
javascript多种数据类型表格排序代码分析
Sep 11 Javascript
node.js中的fs.rmdir方法使用说明
Dec 16 Javascript
js实现将选中值累加到文本框的方法
Aug 12 Javascript
手机端转盘抽奖代码分享
Sep 10 Javascript
JS实现完全语义化的网页选项卡效果代码
Sep 15 Javascript
原生js编写autoComplete插件
Apr 13 Javascript
AngularJs  Creating Services详解及示例代码
Sep 02 Javascript
js中位运算的运用实例分析
Dec 11 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
May 18 Javascript
Vue按时间段查询数据组件使用详解
Aug 21 Javascript
JavaScript的function函数详细介绍
Nov 20 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使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
Laravel下生成验证码的类
2017/11/15 PHP
JavaScript 组件之旅(二)编码实现和算法
2009/10/28 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
JS无法捕获滚动条上的mouse up事件的原因猜想
2012/03/21 Javascript
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
jQuery选择id属性带有点符号元素的方法
2015/03/17 Javascript
详解javascript遍历方式
2015/11/11 Javascript
jQuery配合coin-slider插件制作幻灯片效果的流程解析
2016/05/13 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
JS中使用FormData上传文件、图片的方法
2016/08/07 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
2016/11/21 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
vue自定义全局共用函数详解
2018/09/18 Javascript
vue中的inject学习教程
2019/04/24 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
2020/07/18 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
Python IDLE清空窗口的实例
2018/06/25 Python
python 自动识别并连接串口的实现
2021/01/19 Python
2014年党员自我评价材料
2014/09/22 职场文书
党员批评与自我批评
2014/10/15 职场文书
祝酒词范文
2015/08/12 职场文书
校长新学期寄语2016
2015/12/04 职场文书
初中物理教学反思
2016/02/19 职场文书
vue-cli4.5.x快速搭建项目
2021/05/30 Vue.js
Java实现房屋出租系统详解
2021/10/05 Java/Android
Python中的turtle画箭头,矩形,五角星
2022/03/16 Python