如何在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 对象的定义方法
Jan 10 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
Dec 28 Javascript
用jquery的方法制作一个简单的导航栏
Jun 23 Javascript
jQuery+ajax中getJSON() 用法实例
Dec 22 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
Sep 23 Javascript
JavaScript解八皇后问题的方法总结
Jun 12 Javascript
jQuery的事件预绑定
Dec 05 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
Apr 14 jQuery
Three.js的使用及绘制基础3D图形详解
Apr 27 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
Jun 08 Javascript
基于axios封装fetch方法及调用实例
Feb 05 Javascript
浅谈Vue网络请求之interceptors实际应用
Feb 28 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+MySQL5.0中文乱码解决方法
2006/11/20 PHP
php中使用PHPExcel读写excel(xls)文件的方法
2014/09/15 PHP
PHP提高编程效率的20个要点
2015/09/23 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
firefox插件Firebug的使用教程
2010/01/02 Javascript
javascript高级学习笔记整理
2011/08/14 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
解决js下referer兼容各大浏览器的方法
2014/11/03 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
2016/06/27 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
JavaScript+CSS相册特效实例代码
2017/09/07 Javascript
JS实现select选中option触发事件操作示例
2018/07/13 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
2018/09/13 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
js中addEventListener()与removeEventListener()用法案例分析
2020/03/02 Javascript
详解ES6中class的实现原理
2020/10/03 Javascript
jquery实现加载更多"转圈圈"效果(示例代码)
2020/11/09 jQuery
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
python的类方法和静态方法
2014/12/13 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
浅谈Python 命令行参数argparse写入图片路径操作
2020/07/12 Python
pandas 数据类型转换的实现
2020/12/29 Python
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
政府门卫岗位职责
2014/04/29 职场文书
活动总结的格式
2014/05/07 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
python 网络编程要点总结
2021/06/18 Python
python数字图像处理之图像的批量处理
2022/06/28 Python