var EnumOAFlag = { DocFromOA: 1, DocFromNoOA: 0 } //记录是否用户点击OA文件的保存按钮 var EnumDocSaveFlag = { OADocSave: 1, NoneOADocSave: 0 } //标识文档的落地模式 本地文档落地 0 ,不落地 1 var EnumDocLandMode = { DLM_LocalDoc: 0, DLM_OnlineDoc: 1 } //加载时会执行的方法 function OnWPSWorkTabLoad(ribbonUI) { wps.ribbonUI = ribbonUI; if (typeof(wps.Enum) == "undefined") { // 如果没有内置枚举值 wps.Enum = WPS_Enum; } OnJSWorkInit(); //初始化文档事件(全局参数,挂载监听事件) // setTimeout(activeTab,2000); // 激活OA助手菜单 OpenTimerRun(OnDocSaveByAutoTimer); //启动定时备份过程 return true; } //文档各类初始化工作(WPS Js环境) function OnJSWorkInit() { pInitParameters(); //OA助手环境的所有配置控制的初始化过程 AddDocumentEvent(); //挂接文档事件处理函数 } //初始化全局参数 function pInitParameters() { wps.PluginStorage.setItem(constStrEnum.OADocUserSave, EnumDocSaveFlag.NoneOADocSave); //初始化,没有用户点击保存按钮 var l_wpsUserName = wps.WpsApplication().UserName; wps.PluginStorage.setItem(constStrEnum.WPSInitUserName, l_wpsUserName); //在OA助手加载前,先保存用户原有的WPS应用用户名称 wps.PluginStorage.setItem(constStrEnum.OADocCanSaveAs, false); //默认OA文档不能另存为本地 wps.PluginStorage.setItem(constStrEnum.AllowOADocReOpen, false); //设置是否允许来自OA的文件再次被打开 wps.PluginStorage.setItem(constStrEnum.ShowOATabDocActive, false); //设置新打开文档是否默认显示OA助手菜单Tab 默认为false wps.PluginStorage.setItem(constStrEnum.DefaultUploadFieldName, "file"); //针对UploadFile方法设置上载字段名称 wps.PluginStorage.setItem(constStrEnum.AutoSaveToServerTime, "10"); //自动保存回OA服务端的时间间隔。如果设置0,则关闭,最小设置3分钟 wps.PluginStorage.setItem(constStrEnum.TempTimerID, "0"); //临时值,用于保存计时器ID的临时值 // 以下是一些临时状态参数,用于打开文档等的状态判断 wps.PluginStorage.setItem(constStrEnum.IsInCurrOADocOpen, false); //用于执行来自OA端的新建或打开文档时的状态 wps.PluginStorage.setItem(constStrEnum.IsInCurrOADocSaveAs, false); //用于执行来自OA端的文档另存为本地的状态 wps.PluginStorage.setItem(constStrEnum.RevisionEnableFlag, false) //按钮的标记控制 wps.PluginStorage.setItem(constStrEnum.Save2OAShowConfirm, true); //弹出上传成功后的提示信息 } //挂载WPS的文档事件 function AddDocumentEvent() { wps.ApiEvent.AddApiEventListener("WindowActivate", OnWindowActivate); wps.ApiEvent.AddApiEventListener("DocumentBeforeSave", OnDocumentBeforeSave); wps.ApiEvent.AddApiEventListener("DocumentBeforeClose", OnDocumentBeforeClose); wps.ApiEvent.AddApiEventListener("DocumentAfterClose", OnDocumentAfterClose); wps.ApiEvent.AddApiEventListener("DocumentBeforePrint", OnDocumentBeforePrint); wps.ApiEvent.AddApiEventListener("DocumentOpen", OnDocumentOpen); wps.ApiEvent.AddApiEventListener("DocumentNew", OnDocumentNew); // wps.ApiEvent.AddApiEventListener("NewDocument", OnDocumentNew); console.log("AddDocumentEvent"); } /** * 打开插入书签页面 */ function OnInsertBookmarkToDoc() { if (!wps.WpsApplication().ActiveDocument) { return; } OnShowDialog("selectBookmark.html", "自定义书签", 700, 440, false); } /** * 作用:打开当前文档的页面设置对话框 */ function OnPageSetupClicked() { var wpsApp = wps.WpsApplication(); var doc = wpsApp.ActiveDocument; if (!doc) { return; } wpsApp.Dialogs.Item(wps.Enum&&wps.Enum.wdDialogFilePageSetup||178).Show(); } /** * 作用:打开当前文档的打印设置对话框 */ function OnPrintDocBtnClicked() { var wpsApp = wps.WpsApplication(); var doc = wpsApp.ActiveDocument; if (!doc) { return; } wpsApp.Dialogs.Item(wps.Enum&&wps.Enum.wdDialogFilePrint||88).Show(); } /** * 作用:接受所有修订内容 * */ function OnAcceptAllRevisions() { //获取当前文档对象 var l_Doc = wps.WpsApplication().ActiveDocument; if (!l_Doc) { return; } if (l_Doc.Revisions.Count >= 1) { if (!wps.confirm("目前有" + l_Doc.Revisions.Count + "个修订信息,是否全部接受?")) { return; } l_Doc.AcceptAllRevisions(); } } /** * 作用:拒绝当前文档的所有修订内容 */ function OnRejectAllRevisions() { var l_Doc = wps.WpsApplication().ActiveDocument; if (!l_Doc) { return; } if (l_Doc.Revisions.Count >= 1) { l_Doc.RejectAllRevisions(); } } /** * 作用:把当前文档修订模式关闭 */ function OnCloseRevisions() { //获取当前文档对象 var l_Doc = wps.WpsApplication().ActiveDocument; OnRevisionsSwitch(l_Doc, false); } /** * 作用:把当前文档修订模式打开 */ function OnOpenRevisions() { //获取当前文档对象 var l_Doc = wps.WpsApplication().ActiveDocument; OnRevisionsSwitch(l_Doc, true); } function OnRevisionsSwitch(doc, openRevisions) { if (!doc) { return; } var l_activeWindow = doc.ActiveWindow; if (l_activeWindow) { var v = l_activeWindow.View; if (v) { //WPS 显示使用“修订”功能对文档所作的修订和批注 v.ShowRevisionsAndComments = openRevisions; //WPS 显示从文本到修订和批注气球之间的连接线 v.RevisionsBalloonShowConnectingLines = openRevisions; } if (openRevisions == true) { //去掉修改痕迹信息框中的接受修订和拒绝修订勾叉,使其不可用 wps.WpsApplication().CommandBars.ExecuteMso("KsoEx_RevisionCommentModify_Disable"); } //RevisionsMode: //wdBalloonRevisions 0 在左边距或右边距的气球中显示修订。 //wdInLineRevisions 1 在正文中显示修订,使用删除线表示删除,使用下划线表示插入。 // 这是 Word 早期版本的默认设置。 //wdMixedRevisions 2 不支持。 doc.TrackRevisions = openRevisions; // 开关修订 l_activeWindow.ActivePane.View.RevisionsMode = 2; //2为不支持气球显示。 } } /** * 作用:打开扫描仪 */ function OnOpenScanBtnClicked() { var doc = wps.WpsApplication().ActiveDocument; if (!doc) { return; } //打开扫描仪 try { wps.WpsApplication().WordBasic.InsertImagerScan(); //打开扫描仪 } catch (err) { alert("打开扫描仪的过程遇到问题。"); } } /** * 作用:在文档的当前光标处插入从前端传递来的图片 * OA参数中 picPath 是需要插入的图片路径 * 图片插入的默认版式是在浮于文档上方 */ function DoInsertPicToDoc() { console.log("DoInsertPicToDoc..."); var l_doc; //文档对象 l_doc = wps.WpsApplication().ActiveDocument; if (!l_doc) { return; } //获取当前文档对象对应的OA参数 var l_picPath = GetDocParamsValue(l_doc, constStrEnum.picPath); // 获取OA参数传入的图片路径 if (l_picPath == "") { // alert("未获取到系统传入的图片URL路径,不能正常插入图片"); // return; //如果没有传,则默认写一个图片地址 l_picPath="http://127.0.0.1:3888/file/OA模板公章.png" } var l_picHeight = GetDocParamsValue(l_doc, constStrEnum.picHeight); //图片高 var l_picWidth = GetDocParamsValue(l_doc, constStrEnum.picWidth); //图片宽 if (l_picHeight == "") { //设定图片高度 l_picHeight = 39.117798; //13.8mm=39.117798磅 } if (l_picWidth == "") { //设定图片宽度 l_picWidth = 72; //49.7mm=140.880768磅 } var l_shape = l_doc.Shapes.AddPicture(l_picPath, false, true); l_shape.Select(); // l_shape.WrapFormat.Type = wps.Enum&&wps.Enum.wdWrapBehind||5; //图片的默认版式为浮于文字上方,可通过此设置图片环绕模式 } /** * 作用:模拟插入签章图片 * @param {*} doc 文档对象 * @param {*} picPath 图片路径 * @param {*} picWidth 图片宽度 * @param {*} picHeight 图片高度 */ function OnInsertPicToDoc(doc, picPath, picWidth, picHeight,callBack) { // alert("图片路径:"+picPath); if (!doc) { return; } if (typeof picPath == "undefined" || picPath == null || picPath == "") { alert("未获取到系统传入的图片URL路径,不能正常插入印章"); return; } if (!picWidth) { //设定图片宽度 picWidth = 95; //49.7mm=140.880768磅 } if (!picHeight) { //设定图片高度 picHeight = 40; //13.8mm=39.117798磅 } var selection = doc.ActiveWindow.Selection; // 活动窗口选定范围或插入点 var pagecount = doc.BuiltInDocumentProperties.Item(wps.Enum&&wps.Enum.wdPropertyPages||14); //获取文档页数 selection.GoTo(wps.Enum&&wps.Enum.wdGoToPage||1, wps.Enum&&wps.Enum.wdGoToPage||1, pagecount.Value); //将光标指向文档最后一页 DownloadFile(picPath,function(url){ selection.ParagraphFormat.LineSpacing = 12 //防止文档设置了固定行距 var picture = selection.InlineShapes.AddPicture(url, true, true); //插入图片 wps.FileSystem.Remove(url) //删除本地的图片 picture.LockAspectRatio = 0; //在调整形状大小时可分别改变其高度和宽度 picture.Height = picHeight; //设定图片高度 picture.Width = picWidth; //设定图片宽度 picture.LockAspectRatio = 0; picture.Select(); //当前图片为焦点 //定义印章图片对象 var seal_shape = picture.ConvertToShape(); //类型转换:嵌入型图片->粘贴版型图片 seal_shape.RelativeHorizontalPosition = wps.Enum&&wps.Enum.wdRelativeHorizontalPositionPage||1; seal_shape.RelativeVerticalPosition = wps.Enum&&wps.Enum.wdRelativeVerticalPositionPage||1; seal_shape.Left = 315; //设置指定形状或形状范围的垂直位置(以磅为单位)。 seal_shape.Top = 630; //指定形状或形状范围的水平位置(以磅为单位)。 callBack&&callBack() }) } /** * 作用: 把当前文档保存为其他格式的文档并上传 * @param {*} p_FileSuffix 输出的目标格式后缀名,支持:.pdf .uof .uot .ofd * @param {*} pShowPrompt 是否弹出用户确认框 */ function OnDoChangeToOtherDocFormat(p_FileSuffix, pShowPrompt) { var l_suffix = p_FileSuffix; // params.suffix; if (!l_suffix) { return; } //获取当前执行格式转换操作的文档 var l_doc = wps.WpsApplication().ActiveDocument; if (!l_doc) { return; } console.log(pShowPrompt) if (typeof(pShowPrompt) == "undefined") { pShowPrompt = true; //默认设置为弹出用户确认框 } //默认设置为以当前文件的显示模式输出,即当前为修订则输出带有修订痕迹的 pDoChangeToOtherDocFormat(l_doc, l_suffix, pShowPrompt, true); } /** * 作用:获取文档的Path或者临时文件路径 * @param {*} doc */ function getDocSavePath(doc) { if (!doc) { return; } if (doc.Path == "") { //对于不落地文档,文档路径为空 return wps.Env.GetTempPath(); } else { return doc.Path } } /** * 作用:把当前文档输出为另外的格式保存 * @param {*} p_Doc 文档对象 * @param {*} p_Suffix 另存为的目标文件格式 * @param {*} pShowPrompt 是否弹出用户确认框 * @param {*} p_ShowRevision :是否强制关闭修订,如果是False,则强制关闭痕迹显示。如果为true则不做控制输出。 */ function pDoChangeToOtherDocFormat(p_Doc, p_Suffix, pShowPrompt, p_ShowRevision) { if (!p_Doc) { return; } var l_suffix = p_Suffix; //获取该文档对应OA参数的上载路径 var l_uploadPath = GetDocParamsValue(p_Doc, constStrEnum.uploadAppendPath); if (l_uploadPath == "" || l_uploadPath == null) { l_uploadPath = GetDocParamsValue(p_Doc, constStrEnum.uploadPath); } var l_FieldName = GetDocParamsValue(p_Doc, constStrEnum.uploadFieldName); if (l_FieldName == "") { l_FieldName = wps.PluginStorage.getItem(constStrEnum.DefaultUploadFieldName); //默认是'file' } if (l_uploadPath == "" && pShowPrompt == true) { alert("系统未传入有效上载文件路径!不能继续转换操作。"); //如果OA未传入上载路径,则给予提示 return; } if (pShowPrompt == true) { if (!wps.confirm("当前文档将另存一份" + l_suffix + " 格式的副本,并上传到系统后台,请确认 ?")) { return; } } // 先把文档输出保存为指定的文件格式,再上传到后台 wps.PluginStorage.setItem(constStrEnum.OADocUserSave, true); //设置一个临时变量,用于在BeforeSave事件中判断 if (p_ShowRevision == false) { // 强制关闭痕迹显示 var l_SourceName = p_Doc.Name; var l_NewName=""; var docPath=getDocSavePath(p_Doc); if(docPath.indexOf("\\")>0){ l_NewName = docPath + "\\B_" + p_Doc.Name; }else{ l_NewName = docPath + "/B_" + p_Doc.Name; } if(docPath.indexOf("\\")>0){ l_SourceName = docPath + "\\" + l_SourceName; }else{ l_SourceName = docPath + "/" + l_SourceName; } p_Doc.SaveAs2($FileName = l_NewName, $AddToRecentFiles = false); p_Doc.SaveAs2($FileName = l_SourceName, $AddToRecentFiles = false); //以下以隐藏模式打开另一个文档 var l_textEncoding = wps.WpsApplication().Options.DefaultTextEncoding; //默认 936 var l_Doc = wps.WpsApplication().Documents.Open(l_NewName, false, false, false, "", "", false, "", "", 0, l_textEncoding, false); l_Doc.TrackRevisions = false; //关闭修订模式 l_Doc.ShowRevisions = false; //隐含属性,隐藏修订模式 l_Doc.AcceptAllRevisions(); l_Doc.Save(); handleFileAndUpload(l_suffix, l_Doc, l_uploadPath, l_FieldName); l_Doc.Close(); wps.FileSystem.Remove(l_NewName); //删除临时文档 } else { handleFileAndUpload(l_suffix, p_Doc, l_uploadPath, l_FieldName); } wps.PluginStorage.setItem(constStrEnum.OADocUserSave, false); return; } /** * 把文档转换成UOT在上传 */ function OnDoChangeToUOF() {} /** * 打开WPS云文档的入口 */ function pDoOpenWPSCloundDoc() { wps.TabPages.Add("https://www.kdocs.cn"); } /** * 执行另存为本地文件操作 */ function OnBtnSaveAsLocalFile() { //初始化临时状态值 wps.PluginStorage.setItem(constStrEnum.OADocUserSave, false); wps.PluginStorage.setItem(constStrEnum.IsInCurrOADocSaveAs, false); //检测是否有文档正在处理 var l_doc = wps.WpsApplication().ActiveDocument; if (!l_doc) { alert("WPS当前没有可操作文档!"); return; } // 设置WPS文档对话框 2 FileDialogType:=msoFileDialogSaveAs var l_ksoFileDialog = wps.WpsApplication().FileDialog(2); l_ksoFileDialog.InitialFileName = l_doc.Name; //文档名称 if (l_ksoFileDialog.Show() == -1) { // -1 代表确认按钮 //alert("确认"); wps.PluginStorage.setItem(constStrEnum.OADocUserSave, true); //设置保存为临时状态,在Save事件中避免OA禁止另存为对话框 l_ksoFileDialog.Execute(); //会触发保存文档的监听函数 pSetNoneOADocFlag(l_doc); wps.ribbonUI.Invalidate(); //刷新Ribbon的状态 }; } // /** * 作用:执行清稿按钮操作 * 业务功能:清除所有修订痕迹和批注 */ function OnBtnClearRevDoc() { var doc = wps.WpsApplication().ActiveDocument; if (!doc) { alert("尚未打开文档,请先打开文档再进行清稿操作!"); } //执行清稿操作前,给用户提示 if (!wps.confirm("清稿操作将接受所有的修订内容,关闭修订显示。请确认执行清稿操作?")) { return; } //接受所有修订 if (doc.Revisions.Count >= 1) { doc.AcceptAllRevisions(); } //去除所有批注 if (doc.Comments.Count >= 1) { doc.RemoveDocumentInformation(wps.Enum&&wps.Enum.wdRDIComments||1); } //删除所有ink墨迹对象 pDeleteAllInkObj(doc); doc.TrackRevisions = false; //关闭修订模式 wps.ribbonUI.InvalidateControl("btnOpenRevision"); return; } /** * 作用:删除当前文档的所有墨迹对象 * @param {*} p_Doc */ function pDeleteAllInkObj(p_Doc) { var l_Count = 0; var l_IsInkObjExist = true; while (l_IsInkObjExist == true && l_Count < 20) { l_IsInkObjExist = pDeleteInkObj(p_Doc); l_Count++; } return; } /** * 删除墨迹对象 */ function pDeleteInkObj(p_Doc) { var l_IsInkObjExist = false; if (p_Doc) { for (var l_Index = 1; l_Index <= p_Doc.Shapes.Count; l_Index++) { var l_Item = p_Doc.Shapes.Item(l_Index); if (l_Item.Type == 23) { l_Item.Delete(); //只要有一次找到Ink类型,就标识一下 if (l_IsInkObjExist == false) { l_IsInkObjExist = true; } } } } return l_IsInkObjExist; } /** * */ function pSaveAnotherDoc(p_Doc) { if (!p_Doc) { return; } var l_SourceDocName = p_Doc.Name; var l_NewName = "BK_" + l_SourceDocName; p_Doc.SaveAs2(l_NewName); wps.WpsApplication().Documents.Open(); } //保存到OA后台服务器 function OnBtnSaveToServer() { // console.log('SaveToServer'); var l_doc = wps.WpsApplication().ActiveDocument; if (!l_doc) { alert("空文档不能保存!"); return; } //非OA文档,不能上传到OA if (pCheckIfOADoc() == false) { alert("非系统打开的文档,不能直接上传到系统!"); return; } //如果是OA打开的文档,并且设置了保护的文档,则不能再上传到OA服务器 if (pISOADocReadOnly(l_doc)) { wps.alert("系统设置了保护的文档,不能再提交到系统后台。"); return; } /** * 参数定义:OAAsist.UploadFile(name, path, url, field, "OnSuccess", "OnFail") * 上传一个文件到远程服务器。 * name:为上传后的文件名称; * path:是文件绝对路径; * url:为上传地址; * field:为请求中name的值; * 最后两个参数为回调函数名称; */ var l_uploadPath = GetDocParamsValue(l_doc, constStrEnum.uploadPath); // 文件上载路径 if (l_uploadPath == "") { wps.alert("系统未传入文件上载路径,不能执行上传操作!"); return; } var l_showConfirm = wps.PluginStorage.getItem(constStrEnum.Save2OAShowConfirm) if (l_showConfirm) { if (!wps.confirm("先保存文档,并开始上传到系统后台,请确认?")) { return; } } var l_FieldName = GetDocParamsValue(l_doc, constStrEnum.uploadFieldName); //上载到后台的业务方自定义的字段名称 if (l_FieldName == "") { l_FieldName = wps.PluginStorage.getItem(constStrEnum.DefaultUploadFieldName); // 默认为‘file’ } var l_UploadName = GetDocParamsValue(l_doc, constStrEnum.uploadFileName); //设置OA传入的文件名称参数 if (l_UploadName == "") { l_UploadName = l_doc.Name; //默认文件名称就是当前文件编辑名称 } var l_DocPath = l_doc.FullName; // 文件所在路径 if (pIsOnlineOADoc(l_doc) == false) { //对于本地磁盘文件上传OA,先用Save方法保存后,再上传 //设置用户保存按钮标志,避免出现禁止OA文件保存的干扰信息 wps.PluginStorage.setItem(constStrEnum.OADocUserSave, EnumDocSaveFlag.OADocSave); if (l_doc.Path == "") { //对于不落地文档,文档路径为空 l_doc.SaveAs2(wps.Env.GetTempPath() + "/" + l_doc.Name, undefined, undefined, undefined, false); } else { l_doc.Save(); } //执行一次保存方法 //设置用户保存按钮标志 wps.PluginStorage.setItem(constStrEnum.OADocUserSave, EnumDocSaveFlag.NoneOADocSave); //落地文档,调用UploadFile方法上传到OA后台 l_DocPath = l_doc.FullName; try { //调用OA助手的上传方法 UploadFile(l_UploadName, l_DocPath, l_uploadPath, l_FieldName, OnUploadToServerSuccess, OnUploadToServerFail); } catch (err) { alert("上传文件失败!请检查系统上传参数及网络环境!"); } } else { // 不落地的文档,调用 Document 对象的不落地上传方法 wps.PluginStorage.setItem(constStrEnum.OADocUserSave, EnumDocSaveFlag.OADocSave); try { //调用不落地上传方法 l_doc.SaveAsUrl(l_UploadName, l_uploadPath, l_FieldName, "OnUploadToServerSuccess", "OnUploadToServerFail"); } catch (err) { alert("上传文件失败!请检查系统上传参数及网络环境,重新上传。"); } wps.PluginStorage.setItem(constStrEnum.OADocUserSave, EnumDocSaveFlag.NoneOADocSave); } //获取OA传入的 转其他格式上传属性 var l_suffix = GetDocParamsValue(l_doc, constStrEnum.suffix); if (l_suffix == "") { console.log("上传需转换的文件后缀名错误,无法进行转换上传!"); return; } //判断是否同时上传PDF等格式到OA后台 var l_uploadWithAppendPath = GetDocParamsValue(l_doc, constStrEnum.uploadWithAppendPath); //标识是否同时上传suffix格式的文档 if (l_uploadWithAppendPath == "1") { //调用转pdf格式函数,强制关闭转换修订痕迹,不弹出用户确认的对话框 pDoChangeToOtherDocFormat(l_doc, l_suffix, false, false); } return; } /** * 作用:套红头 * 所有与OA系统相关的业务功能,都放在oabuss 子目录下 */ function OnInsertRedHeaderClick() { var l_Doc = wps.WpsApplication().ActiveDocument; if (!l_Doc) { return; } var l_insertFileUrl = GetDocParamsValue(l_Doc, constStrEnum.insertFileUrl); //插入文件的位置 var l_BkFile = GetDocParamsValue(l_Doc, constStrEnum.bkInsertFile); if (l_BkFile == "" || l_insertFileUrl == "") { var height = 250; var width = 400; OnShowDialog("redhead.html", "OA助手", width, height); return; } InsertRedHeadDoc(l_Doc); } /** * 插入时间 * params参数结构 * params:{ * * } */ function OnInsertDateClicked() { var l_Doc = wps.WpsApplication().ActiveDocument; if (l_Doc) { //打开插入日期对话框 wps.WpsApplication().Dialogs.Item(wps.Enum&&wps.Enum.wdDialogInsertDateTime||165).Show(); } } /** * 调用文件上传到OA服务端时, * @param {*} resp */ function OnUploadToServerSuccess(resp) { console.log("成功上传服务端后的回调:" + resp) console.log(resp) var l_doc = wps.WpsApplication().ActiveDocument; var l_showConfirm = wps.PluginStorage.getItem(constStrEnum.Save2OAShowConfirm); if (l_showConfirm) { if (wps.confirm("文件上传成功!继续编辑请确认,取消关闭文档。") == false) { if (l_doc) { console.log("OnUploadToServerSuccess: before Close"); l_doc.Close(-1); //保存文档后关闭 console.log("OnUploadToServerSuccess: after Close"); } } } var l_NofityURL = GetDocParamsValue(l_doc, constStrEnum.notifyUrl); if (l_NofityURL != "") { l_NofityURL = l_NofityURL.replace("{?}", "2"); //约定:参数为2则文档被成功上传 NotifyToServer(l_NofityURL); } } function OnUploadToServerFail(resp) { alert("文件上传失败!"); } function OnbtnTabClick() { alert("OnbtnTabClick"); } //判断当前文档是否是OA文档 function pCheckIfOADoc() { var doc = wps.WpsApplication().ActiveDocument; if (!doc) return false; return CheckIfDocIsOADoc(doc); } //根据传入的doc对象,判断当前文档是否是OA文档 function CheckIfDocIsOADoc(doc) { if (!doc) { return false; } var l_isOA = GetDocParamsValue(doc, constStrEnum.isOA); if (l_isOA == "") { return false }; return l_isOA == EnumOAFlag.DocFromOA ? true : false; } //获取文件来源标识 function pGetDocSourceLabel() { return pCheckIfOADoc() ? "OA文件" : "非OA文件"; } /** * 作用:设置用户名称标签 */ function pSetUserNameLabelControl() { var l_doc = wps.WpsApplication().ActiveDocument; if (!l_doc) return ""; var l_strUserName = ""; if (pCheckIfOADoc() == true) { // OA文档,获取OA用户名 var userName = GetDocParamsValue(l_doc, constStrEnum.userName); l_strUserName = userName == "" ? "未设置" : userName; } else { //非OA传来的文档,则按WPS安装后设置的用户名显示 l_strUserName = "" + wps.PluginStorage.getItem(constStrEnum.WPSInitUserName); } return l_strUserName; } /** * 作用:判断是否是不落地文档 * 参数:doc 文档对象 * 返回值: 布尔值 */ function pIsOnlineOADoc(doc) { var l_LandMode = GetDocParamsValue(doc, constStrEnum.OADocLandMode); //获取文档落地模式 if (l_LandMode == "") { //用户本地打开的文档 return false; } return l_LandMode == EnumDocLandMode.DLM_OnlineDoc; } /** * 作用:返回OA文档落地模式标签 */ function pGetOADocLabel() { var l_Doc = wps.WpsApplication().ActiveDocument; if (!l_Doc) { return ""; } var l_strLabel = ""; //初始化 if (pIsOnlineOADoc(l_Doc) == true) { // 判断是否为不落地文档 l_strLabel = "文档状态:不落地"; } else { l_strLabel = l_Doc.Path != "" ? "文档状态:落地" : "文档状态:未保存"; } //判断OA文档是否是受保护 if (pISOADocReadOnly(l_Doc) == true) { l_strLabel = l_strLabel + "(保护)"; } return l_strLabel; } //返回是否可以点击OA保存按钮的状态 function OnSetSaveToOAEnable() { return pCheckIfOADoc(); } /** * 作用:根据OA传入参数,设置是否显示Ribbob按钮组 * 参数:CtrlID 是OnGetVisible 传入的Ribbob控件的ID值 */ function pShowRibbonGroupByOADocParam(CtrlID) { var l_Doc = wps.WpsApplication().ActiveDocument; if (!l_Doc) { return false; //如果未装入文档,则设置OA助手按钮组不可见 } //获取OA传入的按钮组参数组 var l_grpButtonParams = GetDocParamsValue(l_Doc, constStrEnum.buttonGroups); //disableBtns l_grpButtonParams = l_grpButtonParams + "," + GetDocParamsValue(l_Doc, constStrEnum.disableBtns); // 要求OA传入控制自定义按钮显示的参数为字符串 中间用 , 分隔开 if (typeof(l_grpButtonParams) == "string") { var l_arrayGroup = new Array(); l_arrayGroup = l_grpButtonParams.split(","); //console.log(l_grpButtonParams); // 判断当前按钮是否存在于数组 if (l_arrayGroup.indexOf(CtrlID) >= 0) { return false; } } // 添加OA菜单判断 if (CtrlID == "WPSWorkExtTab") { if(wps.WpsApplication().ActiveDocument){ let l_value=GetDocParamsValue(wps.WpsApplication().ActiveDocument,"isOA"); return l_value?true:false; } var l_value = wps.PluginStorage.getItem(constStrEnum.ShowOATabDocActive); wps.PluginStorage.setItem(constStrEnum.ShowOATabDocActive, false); //初始化临时状态变量 console.log("菜单:" + l_value); return l_value; } return true; } /** * 根据传入Document对象,获取OA传入的参数的某个Key值的Value * @param {*} Doc * @param {*} Key * 返回值:返回指定 Key的 Value */ function GetDocParamsValue(Doc, Key) { if (!Doc) { return ""; } var l_Params = wps.PluginStorage.getItem(Doc.DocID); if (!l_Params) { return ""; } var l_objParams = JSON.parse(l_Params); if (typeof(l_objParams) == "undefined") { return ""; } var l_rtnValue = l_objParams[Key]; if (typeof(l_rtnValue) == "undefined" || l_rtnValue == null) { return ""; } return l_rtnValue; } /** * 获取对象中指定属性的值 * @param {*} params * @param {*} Key */ function GetParamsValue(Params, Key) { if (typeof(Params) == "undefined") { return ""; } var l_rtnValue = Params[Key]; return l_rtnValue; } /** * 作用:插入二维码图片 */ function OnInsertQRCode() { OnShowDialog("QRCode.html", "插入二维码", 400, 400); } /** * 打开本地文档并插入到当前文档中指定位置(导入文档) */ function OnOpenLocalFile() { OpenLocalFile(); } /** * 插入水印 */ function DoInsertWaterToDoc(){     var app, shapeRange;     try {         // app = wpsFrame.Application;         var app=wps.WpsApplication();         var doc = app.ActiveDocument;         var selection = doc.ActiveWindow.Selection;         var pageCount = app.ActiveWindow.ActivePane.Pages.Count;         for(var i=1;i<=pageCount;i++){             selection.GoTo(1, 1, i); app.ActiveWindow.ActivePane.View.SeekView=9;             app.ActiveDocument.Sections.Item(1).Headers.Item(1).Shapes.AddTextEffect(0, "公司绝密", "华文新魏", 36, false, false, 0, 0).Select();             shapeRange = app.Selection.ShapeRange;             shapeRange.TextEffect.NormalizedHeight = false;             shapeRange.Line.Visible = false;             shapeRange.Fill.Visible = true;             shapeRange.Fill.Solid();             shapeRange.Fill.ForeColor.RGB = 12632256;       /* WdColor枚举 wdColorGray25 代表颜色值 */             shapeRange.Fill.Transparency = 0.5;             /* 填充透明度,值为0.0~1.0 */             shapeRange.LockAspectRatio = true;             shapeRange.Height = 4.58 * 28.346;             shapeRange.Width = 28.07 * 28.346;             shapeRange.Rotation = 315;                      /* 图形按照Z轴旋转度数,正值为顺时针旋转,负值为逆时针旋转 */             shapeRange.WrapFormat.AllowOverlap = true;             shapeRange.WrapFormat.Side = 3;                 /* WdWrapSideType枚举 wdWrapLargest 形状距离页边距最远的一侧 */             shapeRange.WrapFormat.Type = 3;                              shapeRange.RelativeHorizontalPosition = 0;                   shapeRange.RelativeVerticalPosition = 0;                     shapeRange.Left = '-999995';                                shapeRange.Top = '-999995';                                          }                  /* WdShapePosition枚举 wdShapeCenter 形状的位置在中央 */         selection.GoTo(1, 1, 1); app.ActiveWindow.ActivePane.View.SeekView=0;     } catch (error) {         alert(error.message);     } } /** * 插入电子印章的功能 */ function OnInsertSeal() { OnShowDialog("selectSeal.html", "印章", 730, 500); } /** * 导入模板到文档中 */ function OnImportTemplate() { OnShowDialog("importTemplate.html", "导入模板", 560, 400); } //自定义菜单按钮的点击执行事件 function OnAction(control) { var eleId; if (typeof control == "object" && arguments.length == 1) { //针对Ribbon的按钮的 eleId = control.Id; } else if (typeof control == "undefined" && arguments.length > 1) { //针对idMso的 eleId = arguments[1].Id; console.log(eleId) } else if (typeof control == "boolean" && arguments.length > 1) { //针对checkbox的 eleId = arguments[1].Id; } else if (typeof control == "number" && arguments.length > 1) { //针对combox的 eleId = arguments[2].Id; } switch (eleId) { case "btnOpenWPSYUN": //打开WPS云文档入口 pDoOpenWPSCloundDoc(); break; case "btnOpenLocalWPSYUN": //打开本地文档并插入到文档中 OnOpenLocalFile(); break; case "WPSWorkExtTab": OnbtnTabClick(); break; case "btnSaveToServer": //保存到OA服务器 wps.PluginStorage.setItem(constStrEnum.Save2OAShowConfirm, true) OnBtnSaveToServer(); break; case "btnSaveAsFile": //另存为本地文件 OnBtnSaveAsLocalFile(); break; case "btnChangeToPDF": //转PDF文档并上传 OnDoChangeToOtherDocFormat(".pdf"); break; case "btnChangeToUOT": //转UOF文档并上传 OnDoChangeToOtherDocFormat(".uof"); break; case "btnChangeToOFD": //转OFD文档并上传 OnDoChangeToOtherDocFormat(".ofd"); break; //------------------------------------ case "btnInsertRedHeader": //插入红头 OnInsertRedHeaderClick(); //套红头功能 break; case "btnUploadOABackup": //文件备份 OnUploadOABackupClicked(); break; case "btnInsertSeal": //插入印章 OnInsertSeal(); break; //------------------------------------ //修订按钮组 case "btnClearRevDoc": //执行 清稿 按钮 OnBtnClearRevDoc(); break; case "btnOpenRevision": //打开修订 { let bFlag = wps.PluginStorage.getItem(constStrEnum.RevisionEnableFlag) wps.PluginStorage.setItem(constStrEnum.RevisionEnableFlag, !bFlag) //通知wps刷新以下几个按钮的状态 wps.ribbonUI.InvalidateControl("btnOpenRevision") wps.ribbonUI.InvalidateControl("btnCloseRevision") OnOpenRevisions(); // break; } case "btnCloseRevision": //关闭修订 { let bFlag = wps.PluginStorage.getItem(constStrEnum.RevisionEnableFlag) wps.PluginStorage.setItem(constStrEnum.RevisionEnableFlag, !bFlag) //通知wps刷新以下几个按钮的状态 wps.ribbonUI.InvalidateControl("btnOpenRevision") wps.ribbonUI.InvalidateControl("btnCloseRevision") OnCloseRevisions(); break; } case "btnShowRevision": break; case "btnAcceptAllRevisions": //接受所有修订功能 OnAcceptAllRevisions(); break; case "btnRejectAllRevisions": //拒绝修订 OnRejectAllRevisions(); break; //------------------------------------ case "btnInsertPic": //插入图片 DoInsertPicToDoc(); break; case "btnInsertWater": DoInsertWaterToDoc() case "btnInsertDate": //插入日期 OnInsertDateClicked(); break; case "btnOpenScan": //打开扫描仪 OnOpenScanBtnClicked(); break; case "btnPageSetup": //打开页面设置 OnPageSetupClicked(); break; case "btnQRCode": //插入二维码 OnInsertQRCode(); // break; case "btnPrintDOC": // 打开打印设置 OnPrintDocBtnClicked(); break; case "lblDocSourceValue": //OA公文提示 OnOADocInfo(); break; case "btnUserName": //点击用户 OnUserNameSetClick(); break; case "btnInsertBookmark": //插入书签 OnInsertBookmarkToDoc(); break; case "btnImportTemplate": //导入模板 OnImportTemplate(); break; case "FileSaveAsMenu": //通过idMso进行「另存为」功能的自定义 case "FileSaveAs": { if (pCheckIfOADoc()) { //文档来源是业务系统的,做自定义 alert("这是OA文档,将Ctrl+S动作做了重定义,可以调用OA的保存文件流到业务系统的接口。") OnBtnSaveToServer(); } else { //本地的文档,期望不做自定义,通过转调idMso的方法实现 wps.WpsApplication().CommandBars.ExecuteMso("FileSaveAsWordDocx"); //此处一定不能去调用与重写idMso相同的ID,否则就是个无线递归了,即在这个场景下不可调用FileSaveAs和FileSaveAsMenu这两个方法 } break; } case "FileSave": //通过idMso进行「保存」功能的自定义 { if (pCheckIfOADoc()) { //文档来源是业务系统的,做自定义 alert("这是OA文档,将Ctrl+S动作做了重定义,可以调用OA的保存文件流到业务系统的接口。") OnBtnSaveToServer(); } else { //本地的文档,期望不做自定义,通过转调idMso的方法实现 // wps.WpsApplication().CommandBars.ExecuteMso("FileSave"); wps.WpsApplication().CommandBars.ExecuteMso("SaveAll"); //此处一定不能去调用与重写idMso相同的ID,否则就是个无线递归了,即在这个场景下不可调用FileSaveAs和FileSaveAsMenu这两个方法 } break; } case "FileNew": case "FileNewMenu": case "WindowNew": case "FileNewBlankDocument": { if (pCheckIfOADoc()) { //文档来源是业务系统的,做自定义 alert("这是OA文档,将Ctrl+N动作做了禁用") } } break case "ShowAlert_ContextMenuText": { let selectText = wps.WpsApplication().Selection.Text; alert("您选择的内容是:\n" + selectText); break; } case "btnSendMessage1": { /** * 内部封装了主动响应前端发送的请求的方法 */ //参数自定义,这里只是负责传递参数,在WpsInvoke.RegWebNotify方法的回调函数中去做接收,自行解析参数 let params={ type:'executeFunc1', message:"当前时间为:" + currentTime() } /** * WebNotify: * 参数1:发送给业务系统的消息 * 参数2:是否将消息加入队列,是否防止丢失消息,都需要设置为true */ wps.OAAssist.WebNotify(JSON.stringify(params),true); //如果想传一个对象,则使用JSON.stringify方法转成对象字符串。 break; } case "btnSendMessage2": { /** * 内部封装了主动响应前端发送的请求的方法 */ let msgInfo = { id: 1, name: 'kingsoft', since: "1988" } //参数自定义,这里只是负责传递参数,在WpsInvoke.RegWebNotify方法的回调函数中去做接收,自行解析参数 let params={ type:'executeFunc2', message:"当前时间为:" + currentTime(), msgInfoStr: JSON.stringify(msgInfo) } /** * WebNotify: * 参数1:发送给业务系统的消息 * 参数2:是否将消息加入队列,是否防止丢失消息,都需要设置为true */ wps.OAAssist.WebNotify(JSON.stringify(params),true); //如果想传一个对象,则使用JSON.stringify方法转成对象字符串。 break; } case "btnAddWebShape": { let l_doc = wps.WpsApplication().ActiveDocument; l_doc.Shapes.AddWebShape("https://www.wps.cn"); break; } default: break; } return true; } /** * 作用:重新设置当前用户名称 */ function OnUserNameSetClick() { var l_UserPageUrl = "setUserName.html" OnShowDialog(l_UserPageUrl, "OA助手用户名称设置", 500, 300); } /** * 作用:展示当前文档,被OA助手打开后的,操作记录及相关附加信息 */ function OnOADocInfo() { return; } /** * 作用:自定义菜单按钮的图标 */ function GetImage(control) { var eleId; if (typeof control == "object" && arguments.length == 1) { //针对Ribbon的按钮的 eleId = control.Id; } else if (typeof control == "undefined" && arguments.length > 1) { //针对idMso的 eleId = arguments[1].Id; } else if (typeof control == "boolean" && arguments.length > 1) { //针对checkbox的 eleId = arguments[1].Id; } else if (typeof control == "number" && arguments.length > 1) { //针对combox的 eleId = arguments[2].Id; } switch (eleId) { case "btnOpenWPSYUN": return "./icon/w_WPSCloud.png"; //打开WPS云文档 case "btnOpenLocalWPSYUN": //导入文件 return "./icon/w_ImportDoc.png" case "btnSaveToServer": //保存到OA后台服务端 return "./icon/w_Save.png"; case "btnSaveAsFile": //另存为本地文件 return "./icon/w_SaveAs.png"; case "btnChangeToPDF": //输出为PDF格式 return "./icon/w_PDF.png"; case "btnChangeToUOT": // return "./icon/w_DocUOF.png"; case "btnChangeToOFD": //转OFD上传 return "./icon/w_DocOFD.png"; // case "btnInsertRedHeader": //套红头 return "./icon/w_GovDoc.png"; case "btnInsertSeal": //印章 return "./icon/c_seal.png"; case "btnClearRevDoc": //清稿 return "./icon/w_DocClear.png" case "btnUploadOABackup": //备份正文 return "./icon/w_BackDoc.png"; case "btnOpenRevision": //打开 修订 case "btnShowRevision": // return "./icon/w_OpenRev.png"; case "btnCloseRevision": //关闭修订 return "./icon/w_CloseRev.png"; case "btnAcceptAllRevisions": // 接受修订 return "./icon/w_AcceptRev.png"; case "btnRejectAllRevisions": // 拒绝修订 return "./icon/w_RejectRev.png"; case "btnSaveAsFile": return ""; case "btnInsertWater": case "btnInsertPic": //插入图片 return "./icon/w_InsPictures.png"; case "btnOpenScan": //打开扫描仪 return "./icon/w_Scanner16.png"; // case "btnPageSetup": //打开页面设置 return "./icon/w_PageGear.png"; case "btnInsertDate": //插入日期 return "./icon/w_InsDate.png"; case "btnQRCode": //二维码 return "./icon/w_DocQr.png"; case "btnPrintDOC": // 打印设置 return "./icon/c_printDoc.png"; case "btnInsertBookmark": return "./icon/c_bookmark.png"; case "btnImportTemplate": return "./icon/w_ImportDoc.png"; case "btnSendMessage1": return "./icon/3.svg" case "btnSendMessage2": return "./icon/3.svg" default: ; } return "./icon/c_default.png"; } function pGetOpenRevisionButtonLabel() { return "打开修订"; } function pGetShowRevisionButtonLabel() { return "显示修订"; } //xml文件中自定义按钮的文字处理函数 function OnGetLabel(control) { var eleId; if (typeof control == "object" && arguments.length == 1) { //针对Ribbon的按钮的 eleId = control.Id; } else if (typeof control == "undefined" && arguments.length > 1) { //针对idMso的 eleId = arguments[1].Id; } else if (typeof control == "boolean" && arguments.length > 1) { //针对checkbox的 eleId = arguments[1].Id; } else if (typeof control == "number" && arguments.length > 1) { //针对combox的 eleId = arguments[2].Id; } switch (eleId) { case "btnOpenWPSYUN": //打开WPS云文档 return "WPS云文档"; case "btnOpenLocalWPSYUN": //打开本地云文档目录 return "导入文档"; case "btnSaveAsFile": return "另存为本地"; case "btnChangeToPDF": //转PDF并上传 return "转PDF上传"; case "btnChangeToUOT": //转UOF并上传 return "转UOF上传"; case "btnChangeToOFD": //转OFD格式并上传 return "转OFD上传"; case "lblDocSourceValue": //文件来源标签: return pGetDocSourceLabel(); case "lblUserName": //用户名:lableControl 控件 return "编辑人:"; //pSetUserNameLabelControl(); case "btnUserName": return pSetUserNameLabelControl(); //====================================================== case "btnInsertRedHeader": //套红头 return "套红头"; case "btnInsertSeal": //插入印章 return "印章"; case "btnUploadOABackup": //文件备份 return "文件备份"; //====================================================== case "btnOpenRevision": //打开修订按钮 return pGetOpenRevisionButtonLabel(); case "btnShowRevision": //显示修订按钮 return pGetShowRevisionButtonLabel(); case "btnCloseRevision": //关闭修订按钮 return "关闭修订"; case "btnClearRevDoc": //显示 清稿 return "清稿"; case "btnAcceptAllRevisions": //显示 接受修订 return "接受修订"; case "btnRejectAllRevisions": //显示 拒绝修订 return "拒绝修订"; case "lblDocLandMode": //显示 文档落地方式 :不落地还是本地,包括是否受保护 return pGetOADocLabel(); //--------------------------------------------- case "btnInsertPic": //插入图片 return "插图片"; case "btnInsertDate": //插入日期 return "插日期"; case "btnOpenScan": //打开扫描仪 return "扫描仪"; case "btnInsertWater": return "插入水印" case "btnPageSetup": //打开页面设置 return "页面设置"; case "btnPrintDOC": //打开页面设置 return "打印设置"; case "btnInsertBookmark": return "导入书签"; case "btnImportTemplate": return "导入模板"; default: ; } return ""; } /** * 作用:处理Ribbon按钮的是否可显示 * @param {*} control :Ribbon 的按钮控件 */ function OnGetVisible(control) { var eleId; if (typeof control == "object" && arguments.length == 1) { //针对Ribbon的按钮的 eleId = control.Id; } else if (typeof control == "undefined" && arguments.length > 1) { //针对idMso的 eleId = arguments[1].Id; } else if (typeof control == "boolean" && arguments.length > 1) { //针对checkbox的 eleId = arguments[1].Id; } else if (typeof control == "number" && arguments.length > 1) { //针对combox的 eleId = arguments[2].Id; } var l_value = false; //关闭一些测试中的功能 switch (eleId) { case "lblDocLandMode": //文档落地标签 return true; case "btnOpenScan": return false; case "btnAddWebShape": { if (wps.WpsApplication().Build.toString().indexOf("11.1") != -1){ return true; } return false; } break; default: } //按照 OA文档传递过来的属性进行判断 l_value = pShowRibbonGroupByOADocParam(eleId); return l_value; } /** * 作用:处理Ribbon按钮的是否可用 * @param {*} control :Ribbon 的按钮控件 */ function OnGetEnabled(control) { var eleId; if (typeof control == "object" && arguments.length == 1) { //针对Ribbon的按钮的 eleId = control.Id; } else if (typeof control == "undefined" && arguments.length > 1) { //针对idMso的 eleId = arguments[1].Id; } else if (typeof control == "boolean" && arguments.length > 1) { //针对checkbox的 eleId = arguments[1].Id; } else if (typeof control == "number" && arguments.length > 1) { //针对combox的 eleId = arguments[2].Id; } switch (eleId) { case "btnSaveToServer": //保存到OA服务器的相关按钮。判断,如果非OA文件,禁止点击 case "btnChangeToPDF": //保存到PDF格式再上传 case "btnChangeToUOT": //保存到UOT格式再上传 case "btnChangeToOFD": //保存到OFD格式再上传 case "SaveAll": //保存所有文档 //以下四个idMso的控制是关于文档新建的 case "FileNew": case "FileNewMenu": case "WindowNew": case "FileNewBlankDocument": return OnSetSaveToOAEnable(); case "btnCloseRevision": { let bFlag = wps.PluginStorage.getItem(constStrEnum.RevisionEnableFlag) return bFlag } case "btnOpenRevision": { let bFlag = wps.PluginStorage.getItem(constStrEnum.RevisionEnableFlag) return !bFlag } case "PictureInsert": return false; case "TabInsert"://WPS自身tab:插入 case "TabDeveloper": //WPS自身tab:开发工具 // case "TabPageLayoutWord": //WPS自身tab:页面布局 // case "TabReferences": //WPS自身tab:引用 // case "TabReviewWord": //WPS自身tab:审阅 // case "TabView": //WPS自身tab:视图 { if(pCheckIfOADoc()){ return false;//如果是OA打开的文档,把这个几个tab不可用/隐藏 }else{ return true; } } default: ; } return true; }