如何在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据option的value值快速设定初始的selected选项
Aug 13 Javascript
js 数组实现一个类似ruby的迭代器
Oct 27 Javascript
ExtJS Store的数据访问与更新问题
Apr 28 Javascript
JavaScript初学者应注意的七个细节详细介绍
Dec 27 Javascript
jQuery使用toggleClass方法动态添加删除Class样式的方法
Mar 26 Javascript
jQuery 常见小例汇总
Dec 14 Javascript
javascript函数的节流[throttle]与防抖[debounce]
Nov 15 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
Dec 21 Javascript
vue scroller返回页面记住滚动位置的实例代码
Jan 29 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
Apr 26 Javascript
JavaScript 几种循环方式以及模块化的总结
Sep 03 Javascript
JavaScript 绘制饼图的示例
Feb 19 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中数组首字符过滤功能代码
2012/07/31 PHP
php中将一段数据存到一个txt文件中并显示其内容
2014/08/15 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
详细分析Javascript中创建对象的四种方式
2016/08/17 Javascript
jQuery File Upload文件上传插件使用详解
2016/12/06 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
vue复合组件实现注册表单功能
2017/11/06 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
Python读取网页内容的方法
2015/07/30 Python
python实现多线程的两种方式
2016/05/22 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
python障碍式期权定价公式
2019/07/19 Python
对python中的*args与**kwgs的含义与作用详解
2019/08/28 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
2020/05/26 Python
完美解决IE8下不兼容rgba()的问题
2017/03/31 HTML / CSS
美国在线鞋类零售商:LifeStride
2019/06/09 全球购物
事业单位辞职信范文
2014/01/19 职场文书
元旦晚会邀请函
2014/02/01 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
大学生在校表现评语
2014/12/31 职场文书
2015年大学团支部工作总结
2015/05/13 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
培训感想范文
2015/08/07 职场文书
Nginx本地目录映射实现代码实例
2021/03/31 Servers
一文搞懂php的垃圾回收机制
2021/06/18 PHP
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
2022/04/14 Python