因为项目的关系,研究了一下Office的在线编辑功能,写出来共享一下。
Office xp之后的版本支持通过webdav协议(http的扩展)直接编辑服务器上的文件。
IIS(6.0)支持webdav,这在IIS管理器的web服务扩展中可以看到.利用IIS作为webdav的服务器端,可以很容易的实现office(word,excel等)的在线编辑.
可以简单的实验一下:
确保IIS的webdav扩展安装并被启用了,建立一个虚拟目录test,在其中放一个word文档a.doc,然后打开word, 文件->打开->输入word文档的访问url(http://localhost/test/a.doc),
修改一下文档内容,保存一下,发生了什么? 文档被保存到服务器上了.
在IE中,可以通过js创建Word.Application,来打开,修改服务器上的文档.
另外,安装office时,会同时按装一个ActiveX组件:Sharepoint.OpenDocuments,可么用此组件来激活word,编辑服务器上的文档:
可以看到,基于IIS的webdav支持,可以非常简单的实现office文档的在线编辑, 但有一个问题:这样,文档是存放在文件系统上,我们很多系统中,
文档是存放在数据库中的,这样一来,如何实现呢???
Office xp之后的版本支持通过webdav协议(http的扩展)直接编辑服务器上的文件。
IIS(6.0)支持webdav,这在IIS管理器的web服务扩展中可以看到.利用IIS作为webdav的服务器端,可以很容易的实现office(word,excel等)的在线编辑.
可以简单的实验一下:
确保IIS的webdav扩展安装并被启用了,建立一个虚拟目录test,在其中放一个word文档a.doc,然后打开word, 文件->打开->输入word文档的访问url(http://localhost/test/a.doc),
修改一下文档内容,保存一下,发生了什么? 文档被保存到服务器上了.
在IE中,可以通过js创建Word.Application,来打开,修改服务器上的文档.
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->wApp=newActiveXObject("Word.Application.11");
wApp.Visible=true;
wApp.Documents.Open(url);
if(trackRevisions){ //可以实现痕迹保留呢
wApp.ActiveDocument.TrackRevisions=true;
wApp.ActiveDocument.ShowRevisions=false;
}else
{
wApp.ActiveDocument.TrackRevisions=false;
wApp.ActiveDocument.ShowRevisions=false;
}
wApp.ActiveDocument.Application.UserName=Global_CurrentUserName;
wApp.Visible=true;
wApp.Documents.Open(url);
if(trackRevisions){ //可以实现痕迹保留呢
wApp.ActiveDocument.TrackRevisions=true;
wApp.ActiveDocument.ShowRevisions=false;
}else
{
wApp.ActiveDocument.TrackRevisions=false;
wApp.ActiveDocument.ShowRevisions=false;
}
wApp.ActiveDocument.Application.UserName=Global_CurrentUserName;
另外,安装office时,会同时按装一个ActiveX组件:Sharepoint.OpenDocuments,可么用此组件来激活word,编辑服务器上的文档:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->var__OpenDocuments=null;
functionDocument_Edit2( url )
{
if(__OpenDocuments==null)
{
try{
__OpenDocuments=newActiveXObject("SharePoint.OpenDocuments.3"); //for office 2007
}catch(e){}
if(__OpenDocuments==null||typeof(__OpenDocuments)=="undefined")
{
try{
__OpenDocuments=newActiveXObject("SharePoint.OpenDocuments.2"); //for office 2003
}catch(e){}
}
if(__OpenDocuments==null||typeof(__OpenDocuments)=="undefined")
{
alert("请安装Word(2003或更高版本)");
return;
}
}
//openDocObj.ViewDocument("http://www.abc.com/documents/sample.doc");,"Word.Document"
//openDocObj.CreateNewDocument("http://www.abc.com/documents/sampleTemplate.dot","http://www.abc.com/documents/");
varresult=__OpenDocuments.EditDocument(url,"Word.Document");
if(result==false)
{
alert("无法打开文档.");
}
}
functionDocument_Edit2( url )
{
if(__OpenDocuments==null)
{
try{
__OpenDocuments=newActiveXObject("SharePoint.OpenDocuments.3"); //for office 2007
}catch(e){}
if(__OpenDocuments==null||typeof(__OpenDocuments)=="undefined")
{
try{
__OpenDocuments=newActiveXObject("SharePoint.OpenDocuments.2"); //for office 2003
}catch(e){}
}
if(__OpenDocuments==null||typeof(__OpenDocuments)=="undefined")
{
alert("请安装Word(2003或更高版本)");
return;
}
}
//openDocObj.ViewDocument("http://www.abc.com/documents/sample.doc");,"Word.Document"
//openDocObj.CreateNewDocument("http://www.abc.com/documents/sampleTemplate.dot","http://www.abc.com/documents/");
varresult=__OpenDocuments.EditDocument(url,"Word.Document");
if(result==false)
{
alert("无法打开文档.");
}
}
可以看到,基于IIS的webdav支持,可以非常简单的实现office文档的在线编辑, 但有一个问题:这样,文档是存放在文件系统上,我们很多系统中,
文档是存放在数据库中的,这样一来,如何实现呢???