目 录
2.1.33 UnProtectDoc(BSTRstrPwd).19
一、工作原理WebOffice是基于客户端的ocx控件,它的功能是将Office文档(Word、Excel、WPS)嵌入到浏览器中,并调用Office中各种接口,完成文档编辑工作,然后使用控件的Http接口模拟表单提交,发送到数据处理页面(此文档举例为saveDoc.asp页,代码见演示文件),完成文档的存档工作。 1.1 开发流程├ 装载控件 <object>...</ object > ├ 触发初始化方法 <SCRIPTLANGUAGE=javascript FOR=WebOffice1 EVENT=NotifyCtrlReady> <!-- WebOffice1_NotifyCtrlReady() //--> </SCRIPT> ├ 执行初始化方法,打开新文档或装载已经存在的文档 functionWebOffice1_NotifyCtrlReady() { document.all.WebOffice1.LoadOriginalFile("…","…"); } ├ 根据当前步骤,来决定是否进入修订状态,如果是修订状态,最好设置当前的用户名 functionWebOffice1_NotifyCtrlReady() { document.all.WebOffice1.LoadOriginalFile("…","…"); document.all.WebOffice1.SetCurrUserName("张三"); document.all.WebOffice1.SetTrackRevisions(1); } ├ 填写表单元素,编辑Office文档 ├ 执行Http上传接口保存表单元素和Office文档 //保存文档之前,如果需要接受修订,需要调用 document.all.WebOffice1.SetTrackRevisions(4); //通过Http接口上传 document.all.WebOffice1.HttpInit(); document.all.WebOffice1.HttpAddPostString("…","…"); document.all.WebOffice1.HttpAddPostCurrFile("…","…"); document.all.WebOffice1.HttpPost("…") ├ saveDoc.asp获取表单数据和Office进行数据库操作,并返回操作是否正确。 ├ 根据saveDoc.asp返回值进行相应操作。 1.2 WEB页面调用控件:
<OBJECT id=WebOffice1 height=520width="100%" style="LEFT: 0px; TOP: 0px" classid="clsid:E77E049B-23FC-4DB8-B756-60529A35FAD5" codebase=WebOffice.ocx#Version=3,0,0,0> <PARAM NAME="_Version"VALUE="65536"> <PARAM NAME="_ExtentX"VALUE="2646"> <PARAM NAME="_ExtentY"VALUE="1323"> <PARAM NAME="_StockProps"VALUE="0"></OBJECT> 主要参数说明: id 控件在网页的别名,可以通过别名调用控件的方法、属性 width 控件的宽度,可以使用绝对大小,如width="100px"。 height 控件的高度 codebase 设置控件自动下载的路径,用户如果没有安装控件,系统会自动访问codebase的路径下载控件;“#Version”后的是控件的版本,如果用户当前的软件版本低于“#Version”后面的版本,系统也会自动下载最新的控件
注意: 如果控件的width 和height属性使用%表示,则要明确指明它所在的容器的大小,如把控件放到表格<td>内,则要明确指明表格<td>的width和height的绝对值。 二、接口说明2.1 接口2.1.1 AboutBox原 型: void AboutBox(); 功 能:显示WebOffice版本信息 返回值: 示 例: document.all.WebOffice1.AboutBox();
2.1.2 AcceptAllRevisions原 型: longAcceptAllRevisions(); 功 能:接受当前文档所有修订 返回值: 0:接受修订成功 非零:接受修订失败 示 例: document.all.WebOffice1.AcceptAllRevisions(); 2.1.3 CloseDoc原 型: long CloseDoc(longblReqSaved); 功 能:关闭当前文档 参 数: blReqSaved: 0:关闭文档,不保存当前修改。 1:关闭文档,保存当前修改。 2:如果文档已经被修改,显示保存文档对话框,否则直接关闭。 其它:关闭文档,保存当前修改。 返回值: 0: 失败 非零: 成功 示 例: //关闭当前文档,不保存当前修改。 document.all.WebOffice1.CloseDoc (0);
2.1.4 DelLocalFile原 型: long DelLocalFile(BSTRstrFilePathName); 功 能:删除本地文件 参 数: strFilePathName:本地文件的绝对路径。 返回值: 0: 删除成功 非零: 删除失败 示 例: document.all.WebOffice1.DelLocalFile("c:\\111.doc");
2.1.5 GetDocumentObject原 型: IDispatch*GetDocumentObject(); 获取文档对象的ActiveDocument对象,此接口非常重要,基本所有的VBA功能都可以通过这个接口来实现。 参 数: 返回值: ActiveDocument对象的Dispatch 示 例: /* 以下的JavaScript为采用ActiveDocument的方式直接操作VBA,向DOC文档的书签中加入一个图片。 function AddPicture(strMarkName,strBmpPath,vType) 在书签位置插入图片, strMarkName 书签的名称 strBmpPath 图片的路径 vType 插入后的图片的样式,5为浮动在文字上面 AddPicture("test1","d:\\111.bmp",5); AddPicture("test1","d:\\111.bmp",128); */ function AddPicture(strMarkName,strBmpPath,vType) { //定义一个对象,用来存储ActiveDocument对象 // VAB接口获取书签集合 // VAB接口获取书签strMarkName // VAB接口获取书签strMarkName的Range对象 // VAB接口获取书签strMarkName的Range对象的InlineShapes对象 // VAB接口通过InlineShapes对象向文档中插入图片 //设置图片的样式,5为浮动在文字上面 } }
2.1.6 GetFieldValue原 型: BSTRGetFieldValue(BSTR strFieldName, BSTR strSheetName); 功 能:获得书签位置的数值 参 数: strFieldName:书签的名字 strSheetName:预留字段(值为空)
返回值:返回书签的值 示 例: //获得书签的值 var strFieldValue=document.all.WebOffice1.GetFieldValue("mark_1","")
2.1.7 GetTempFilePath原 型: BSTRGetTempFilePath(); 功 能:获得临时文件路径 参 数: 返回值:当前文件的临时路径 示 例: var strTempPath=document.all.WebOffice1.GetTempFilePath(); 2.1.8 GetRevCount原 型: longGetRevCount(); 功 能:获取修订节点的个数 参 数: 返回值:获取修订节点的个数 示 例:
2.1.9 GetFileSize原 型: longGetFileSize (LPCTSTR strFilePath); 功 能:获取本地文件的大小 参 数: 返回值: 示 例: var vLen = obj.GetFileSize("c:\\111.doc"); 2.1.10 GetBookMarkCount原 型: longGetBookMarkCount(); 功 能:获取文档中书签的总数量 参 数: 返回值: 示 例:
2.1.11 GetBook MarkInfo(lIndex,iType)原 型: longGetBook MarkInfo(lIndex,iType); 功 能:获取文档中书签的信息 参 数: lIndex:书签的序号,从1开始 iType:获取内容类型。0获取书签名,1获取书签值 返回值: 示 例:
2.1.12 HideMenuItem原 型: long HideMenuItem(long lMenuType); 功 能:控制自有工具栏的显示 参 数: lMenuType工具栏开关,采用32位的数字作为开关,当相关位为1的时候,按钮显示,为0是按钮隐藏。 enum{ vNew = 0x01, //新建 vOpen= 0x02, //打开 vSaveAs= 0x04, //保存 vPrint= 0x10, //打印 vPrintView= 0x20, //打印预览 vReturn= 0x1000, //全屏 vShowHideMenu = 0x4000, //显示/隐藏菜单 vFullScrean= 0x2000 //返回 }; 返回值: 示 例: //只显示新建和全屏按钮 Object.HideMenuItem(0x01 + 0x1000); 2.1.13 HttpInit原 型: long HttpInit(); 功 能:初始化上传接口 参 数: 返回值: 示 例: //上传前必须执行此方法 document.all.weboffice1.HttpInit(); 2.1.14 HttpAddPostFile原 型: longHttpAddPostFile(BSTR strName, BSTR strFile); 功 能:Http上传相关(保留) 参 数: 返回值: 示 例: //上传本地文件c:\\111.doc document.all.weboffice1.HttpAddPostFile("111","c:\\111.doc")
2.1.15 HttpAddPostString原 型: longHttpAddPostString(BSTR strName, BSTR strValue); 功 能:添加要上传的表单域 参 数: strName:表单域的名称 strValue:表单域的值
返回值:
示 例: //添加表单域,可多次执行此方法 document.all.WebOffice1.HttpAddPostString("DocTitle",myform.DocTitle.value);
2.1.16 HttpAddPostCurrFile原 型: longHttpAddPostCurrFile(String field, String newFileName); 功 能:添加要上传的Word或者Excel文件 参 数: Field:要上传文件的id newFielName:上传后的新文件名。该参数可以为空,系统将自动为文件命名 返回值: 示 例: document.all.WebOffice1.HttpAddPostCurrFile("DocContent",""); 2.1.17 HttpPost原 型: BSTR HttpPost(BSTRstrHttpURL); 功 能:将当前表单和文件数据提交到指定URL路径 参 数: strHttpURL: 处理表单和文件数据的文件URL路径 返回值: Succeed:上传成功 failed: 上传失败 示 例: //相对路径 var returnValue=document.all.WebOffice1.HttpPost("../saveDoc.jsp"); //绝对路径 var returnValue=document.all.WebOffice1.HttpPost("http://127.0.0.1/saveDoc.jsp") 2.1.18 InsertFile原 形:short InsertFile(LPCTSTR strFilePathName, shortnCurPos) 功 能:插入合并文件,和插入图片。 参 数:strFilePathName: 文件或者图片的路径,可以是Http.或者Ftp路径 nCurPos: 位置和图片控制符。nCurPos 或者nCurPos -8 0: 当前位置 1: 文件开头 2: 文件末尾 如果第四位为1:表示插入的是图片
返回值: 0:正确 其他:错误 示 例: //文件头部 document.all.WebOffice1.InSertFile("http://XX.com/XX.doc",1); //文件尾部 document.all.WebOffice1.InSertFile("http://XX.com/XX.doc",2); //当前光标位置 document.all.WebOffice1.InSertFile("http://XX.com/XX.doc",0); //文件头部 document.all.WebOffice1.InSertFile("http://XX.com/XX.jpg",9); //文件尾部 document.all.WebOffice1.InSertFile("http://XX.com/XX.jpg",10); //当前光标位置 document.all.WebOffice1.InSertFile("http://XX.com/XX.jpg",8); 2.1.19 IsOpened原 型: long IsOpened(); 功 能:判断当前是否打开文件 参 数: 返回值: 0:表示当前未打开文档 非0:表示已经打开文档 FILE_TYPE_WORD = 11, FILE_TYPE_WORD =11, FILE_TYPE_EXCEL= 12, FILE_TYPE_PPT = 13, FILE_TYPE_RTF = 14, FILE_TYPE_WPS = 21, FILE_TYPE_PDF = 31, FILE_TYPE_UNK = 127
示 例: var isOpened=document.all.WebOffice1.IsOpened(); 2.1.20 IsSaved原 型: long IsSaved(); 功 能:判断文件是否被修改 参 数: 返回值: 0:文件已被修改 非零:文件未被修改
示 例: var isSaved=document.all.WebOffice1.IsSaved(); 2.1.21 LoadOriginalFile原 型: longLoadOriginalFile(BSTR pcFileNameOrUrl, BSTR pcType); 功 能:新建、装载Office文档 参 数: pcFileNameOrUrl: 要装载文件的本地路径或者URL,值为空表示新建文档,如果是在Http的Web环境下,可以传相对路径. pcType: doc:打开、新建Word文件 xls:打开、新建Excel文件 ppt:打开、新建PPT 文件 wps:打开、新建WPS 文件
返回值: 0:失败 非0:成功 示 例: // 通过URL打开一个服务器文件,getdoc.asp代码见演示文件 document.all.WebOffice1.LoadOriginalFile("http://127.0.0.1/getdoc.asp?id=8","doc"); // 通过URL打开一个服务器文件,相对路径 document.all.WebOffice1.LoadOriginalFile("/getdoc.asp?id=8","doc"); document.all.WebOffice1.LoadOriginalFile("./getdoc.asp?id=8","doc"); // 新建Excel document.all.WebOffice1.LoadOriginalFile("","xls"); // 通过Word打开本地文件 document.all.WebOffice1.LoadOriginalFile("C:\\demo.doc","doc"); 2.1.22 OpenFileDlg原 型: shortOpenFileDlg(); 功 能:打开本地文件显示在WebOffice中 参 数:pcFileNameOrUrl:保存的文件路径 返回值: 示 例: //打开对话框 document.all.WebOffice1.OpenFileDlg(); 2.1.23 ProtectDoc原 型: longProtectDoc(long lProOrUn, long lType, BSTR strPWD); 功 能:文档保护 参 数: lProOrUn: └ 1:为保护文档 └ 0:为解锁文档 lType : └ 0 :文档保护,只允许修订 └ 1 :文档保护,只允许批注 └ 2 :文档完全保护,不允许任何操作 strPWD:文档保护、解锁时所需设置的密码
返回值: 示 例: // 保护文档,只允许修订 document.all.WebOffice1.ProtectDoc(1,0, "12345"); // 解锁文档 document.all.WebOffice1.ProtectDoc(0,0, "12345");
2.1.24 PrintDoc原 型: long PrintDoc(longblShowDlg); 功 能:打印当前文档 参 数:blShowDlg: 0:不显示打印对话框,直接打印 非零:显示打印对话框 返回值: 0:打印失败 非零:打印成功 示 例: //显示打印对话框 document.all.WebOffice1.PrintDoc(1); 2.1.25 PutSaved原 型: longPutSaved(boolean bSaved); 功 能:设置当前文档的修改状态 参 数: 0: 处于修改状态 1: 处于保存状态 返回值: 示 例: //设置当前文档处于修改状态 document.all.WebOffice1.PutSaved(0); 2.1.26 Save原 型: long Save(); 功 能: 将文件保存原来位置,第一次保存时弹出对话框 参 数: 返回值: 0:保存失败 非零:保存成功 示 例: document.all.WebOffice1.Save(); 2.1.27 SaveAs原 型: long SaveAs(BSTRstrFileName, long dwFileFormat); 功 能:保存文件到本地 参 数: strFileName: 要保存的文件路径和文件名 dwFileFormat:保存的文件类型 └ 0 Word类型 └ 2 Txt文件 └ 6 Rtf文件 └ -4143 Excel类型 返回值: 示 例: document.all.WebOffice1.SaveAs("C:\\test.doc",0); //另存为Word文件 document.all.WebOffice1.SaveAs("C:\\test.txt",2); //另存为Txt文件 document.all.WebOffice1.SaveAs("C:\\test.rtf",6); //另存为Rtf文件 document.all.WebOffice1.SaveAs("C:\\test.xls",-4143); //另存为Excel文件 2.1.28 SetFieldValue原 型: longSetFieldValue(BSTR strFieldName, BSTR strValue, BSTR strSheetName); 功 能:添加书签,套红头模板 参 数:strFieldName:书签的名字,对于Excel文件,此数据位单元格 strValue:书签的值,该处可以是个用于返回数据的URL,用于套红头模板。对于Excel文件,如果插入的是图片,此数值为::JPG::+图片的路径 strSheetName:命令的类型,对于Excel文件此数值为Sheet的名称 └ ::ADDMARK:: 添加书签 └::DELMARK:: 删除书签 └::JPG:: 添加图片,可以利用这个来实现图片电子印章 └ ::FILE:: 调用本地或者URL的文件设置书签值(套红头)
返回值: 示 例: // 添加书签mark_1,并为它赋值 document.all.WebOffice1.SetFieldValue("mark_1","北京","::ADDMARK::"); // 为已存在的书签mark_1赋值 document.all.WebOffice1.SetFieldValue("mark_1","电子签章", ""); // 套本地红头 document.all.WebOffice1.SetFieldValue("mark_1","c:\\test.doc", "::FILE::"); // 套服务端红头1,getDoc.asp页用于返回要装载Word的二进制值,代码见演示文件 document.all.WebOffice1.SetFieldValue("mark_1","http://127.0.0.1/getdoc.asp?id=8", "::FILE::"); // 套服务端红头2 document.all.WebOffice1.SetFieldValue("mark_1","http://127.0.0.1/test.doc","::FILE::"); //添加图片电子印章 document.all.WebOffice1.SetFieldValue("mark_1","http://127.0.0.1/seal.bmp","::JPG::"); //在Excel中添加图片 document.all.WebOffice1.SetFieldValue("","::JPG::http://www.google.cn/intl/zh-CN/images/logo_cn.gif",""); 2.1.29 SetTrackRevisions原 型: longSetTrackRevisions(long lValue); 功 能:修订文档 参 数: lValue:文档修订状态 └ 1: 开始修订文档 └ 0: 进入非留痕状态 └ 4:接受当前修订 返回值: 示 例: // 开始修订 document.all.WebOffice1.SetTrackRevisions(1); // 接受修订 document.all.WebOffice1.SetTrackRevisions(4); 2.1.30 ShowRevisions原 型: longShowRevisions(long nNewValue); 功 能:显示、隐藏修订 参 数: nNewValue:要保存的文件路径和文件名 └ 1:显示修订 └ 0:隐藏修订 返回值: 示例: document.all.WebOffice1.ShowRevisions(0); //隐藏修订 2.1.31 SetCurrUserName原 型: longSetCurrUserName(BSTR strCurrUserName); 功 能:设置当前编辑Word、Excel的用户名,主要用于修订文档,标识不同人进行的不同操作 参 数:strCurrUserName:当前编辑人的用户名 返回值: 示 例:document.all.WebOffice1.SetCurrUserName("张三"); 2.1.32 ShowDialog原 型: long ShowDialog(longdwIndex); 功 能: 显示对话框 参 数: dwIndex:对话框的ID数值,详细的数值列表请参照附件。 返回值: 示 例:
2.1.33 UnProtectDoc(BSTR strPwd)原 型: long UnProtectDoc(BSTR strPwd); 功 能:解除当前文档保护 参 数:strPwd文档保护时所设置的密码 返回值: 0:解锁成功 非零:解锁失败 示 例: document.all.WebOffice1.UnProtectDoc("12345");
2.2 属性2.2.1 DocType原 型: longDocType; 说 明:文件类型,只读 数 值: FILE_TYPE_WORD =11, FILE_TYPE_WORD = 11, FILE_TYPE_EXCEL = 12, FILE_TYPE_PPT = 13, FILE_TYPE_RTF = 14, FILE_TYPE_WPS = 21, FILE_TYPE_PDF = 31, FILE_TYPE_UNK = 127
2.2.2 Version原 型: BSTRVersion; 说 明:打开文件的版本号,只读 数 值:
2.2.3 AppVersion原 型: BSTRVersion; 说 明:打开文件的版本号,只读 数 值:
2.2.4 lEventRet原 型: BOOL LEventRet; 说 明:见事件 NotifyToolBarClick事件 数 值:
2.2.5 IsModify原 型: BOOLIsModify; 说 明:判断文档是否被修改,需要在LoadOrigarFile之前设置 OptionFlag|= 0x0400 才有效。 2.2.6 lContinue原 型: long lContinue; 功 能:用于NotifyWordEvent的处理函数中,可以终止相应事件的继续执行 参 数: 返回值: 1:可以继续执行(默认) 0:不是2007版本 示 例: //禁止关闭当前的Word/Excel/Wps文档 OnNotifyWordEvent(BSTRstrEventName) { if(strEventName == “DocumentBeforeClose”) { lContinue = 0; } }
2.3 事件2.3.1 NotifyWordEvent原 型: void NotifyWordEvent(BSTRstrEventName); 说 明:捕获部分Word/Excel/Wps事件。 参数:strEventNameàWord/Excel的事件名,可能是以下的数值 DocumentChange DocumentBeforeClose DocumentBeforePrint DocumentBeforeSave 备注:本事件在本版本扩展到Excel和Wps的支持,且可以终止该事件的继续执行(使用属性lContinue)。 2.3.2 NotifyCtrlReady原 型: void NotifyCtrlReady(); 说 明:当控件准备完毕后触发,一般在这个事件中完成初始化的操作。
2.3.3 NotifyToolBarClick原 型: voidNotifyToolBarClick(long iIndex); 参 数: long iIndex : 工具栏按钮ID。 ID_RETURN 32769 ID_NEW 32770 ID_OPEN 32771 ID_SAVEAS 32772 ID_FULLSCREAN 32773 ID_PRINT 32774 ID_PRINTVIEW 32775 说 明:
(不适用于Office2007)每个按钮都有默认的处理动作,如果不希望触发默认的处理动作,需要在此时间中设置属性lEventRet = 0; 以下实例截获了SAVEAS的按钮事件。 //1. 定义事件处理函数 <SCRIPTLANGUAGE=javascript FOR=WebOffice1 VENT=NotifyToolBarClick(lCmd)> <!-- WebOffice1_NotifyToolBarClick(lCmd) //--> </SCRIPT> //2. 截获处理事件 functionWebOffice1_NotifyToolBarClick(lCmd) { if(32772==lCmd){ document.all.WebOffice1.lEventRet = 0; } }
附录:WebOffice文件Http上传原理
|
|