执行一下步骤,删掉加载项,然后打开本地文件尝试另存为。 以下操作,没有的可以忽略: 1、删除jsaddons目录中的publish.xml和jsplugins.xml文件 2、删除oem.ini中的JsApiPlugin=true和JSPluginsServer配置项 3、如果是国产机,那么使用quickstartoffice restart重启一下WPS
如果还能复现,则开发工具下面的com加载项,或者客户端自身的问题 如果不能复现,则为加载项问题。
OA在ribbon.xml中对FileSave,FileSaveAs和FileSaveAsMenu做了重写,这三个按钮上加了onAction。
在onAction中新增或者修改FileSave,FileSaveAs和FileSaveAsMenu的case。
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.Application.ActiveDocument.Save() //此处一定不能去调用与重写idMso相同的ID,否则就是个无限递归了,即在这个场景下不可调用FileSaveAs和FileSaveAsMenu这两个方法 } break; }
case "FileSaveAs": case "FileSaveAsMenu": { if (pCheckIfOADoc()) { //文档来源是业务系统的,做自定义 alert("这是OA文档,将Ctrl+S动作做了重定义,可以调用OA的保存文件流到业务系统的接口。") OnBtnSaveToServer(); } else { //本地的文档,期望不做自定义,通过转调idMso的方法实现 wps.WpsApplication().CommandBars.ExecuteMso("FileSaveAsExcelXlsx"); //此处一定不能去调用与重写idMso相同的ID,否则就是个无限递归了,即在这个场景下不可调用FileSaveAs和FileSaveAsMenu这两个方法 } break; } case "FileSave": //通过idMso进行「保存」功能的自定义 { if (pCheckIfOADoc()) { //文档来源是业务系统的,做自定义 alert("这是OA文档,将Ctrl+S动作做了重定义,可以调用OA的保存文件流到业务系统的接口。") OnBtnSaveToServer(); } else { //本地的文档,期望不做自定义,通过转调idMso的方法实现 // wps.WpsApplication().CommandBars.ExecuteMso("FileSave"); wps.Application.ActiveWorkbook.Save() //此处一定不能去调用与重写idMso相同的ID,否则就是个无限递归了,即在这个场景下不可调用FileSaveAs和FileSaveAsMenu这两个方法 } break; }
如何确定和WPS加载项有关系
执行一下步骤,删掉加载项,然后打开本地文件尝试另存为。
以下操作,没有的可以忽略:
1、删除jsaddons目录中的publish.xml和jsplugins.xml文件
2、删除oem.ini中的JsApiPlugin=true和JSPluginsServer配置项
3、如果是国产机,那么使用quickstartoffice restart重启一下WPS
如果还能复现,则开发工具下面的com加载项,或者客户端自身的问题
如果不能复现,则为加载项问题。
问题原因:
OA在ribbon.xml中对FileSave,FileSaveAs和FileSaveAsMenu做了重写,这三个按钮上加了onAction。
解决方案
在onAction中新增或者修改FileSave,FileSaveAs和FileSaveAsMenu的case。
文字参考
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.Application.ActiveDocument.Save() //此处一定不能去调用与重写idMso相同的ID,否则就是个无限递归了,即在这个场景下不可调用FileSaveAs和FileSaveAsMenu这两个方法 } break; }
表格参考:
case "FileSaveAs": case "FileSaveAsMenu": { if (pCheckIfOADoc()) { //文档来源是业务系统的,做自定义 alert("这是OA文档,将Ctrl+S动作做了重定义,可以调用OA的保存文件流到业务系统的接口。") OnBtnSaveToServer(); } else { //本地的文档,期望不做自定义,通过转调idMso的方法实现 wps.WpsApplication().CommandBars.ExecuteMso("FileSaveAsExcelXlsx"); //此处一定不能去调用与重写idMso相同的ID,否则就是个无限递归了,即在这个场景下不可调用FileSaveAs和FileSaveAsMenu这两个方法 } break; } case "FileSave": //通过idMso进行「保存」功能的自定义 { if (pCheckIfOADoc()) { //文档来源是业务系统的,做自定义 alert("这是OA文档,将Ctrl+S动作做了重定义,可以调用OA的保存文件流到业务系统的接口。") OnBtnSaveToServer(); } else { //本地的文档,期望不做自定义,通过转调idMso的方法实现 // wps.WpsApplication().CommandBars.ExecuteMso("FileSave"); wps.Application.ActiveWorkbook.Save() //此处一定不能去调用与重写idMso相同的ID,否则就是个无限递归了,即在这个场景下不可调用FileSaveAs和FileSaveAsMenu这两个方法 } break; }
📋 章节目录
如何确定和WPS加载项有关系 问题原因: 解决方案 文字参考 表格参考: