WebOffice

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

WebOffice

# 1 功能介绍 支持word、excel文档的在线编辑、保存、模板变量定义和替换等操作,Office文档和金蝶云苍穹实现无缝对接。 # 2 控件对象 `kd.bos.form.control.WebOffice` # 3 视觉展示 Demo见附件 ![image.webp](/download/0100eaaa6f8f834849b496ba8f337ed26a57.webp)![shijue.webp](./image/shijue.webp) # 4 安装和环境配置 ## 4.1 下载安装weboffice组件 安装包见附件,建议安装到C盘或D盘根目录下,安装路径不要包含中文。 ## 4.2 配置本地环境 需预先安装IE浏览器(11.0及以上)以及Office、WPS办公软件(支持Office2003,Office2007,Office2010,Office2013, Office2016等非Home版、非Student版的办公软件,支持Office的32位和64位,必须是完全安装的版本,Ghost版系统自带Office的话,需要卸载重装Office),不支持苹果操作系统。 # 5 API及指令 ## 5.1 Java API 方法名 | 参数 | 说明 :-------: | :-------: | :------: `save` | `String` 文件名 | 保存文档 `close` | 无 | 关闭文档 `open` | `String` 文档URL | 打开文档 `open` | `String,String` 文档URL,用户名 | 打开文档 `open` | `String,List<String>,String` 文档URL,书签,密码 | 打开文档,仅设定可编辑区域才可供用户修改 `open` | `String,String,List<String>,String` 文档URL,用户名,书签,密码 | 打开文档,仅设定可编辑区域才可供用户修改 `openAll` | `String, String` URL文档,文件名 | 支持打开多种文档包含Excel,需要传入文件名以打开文件 `addTable` | `String[][]` 插入数据 | 添加表格 `addTable` | `String,String[][]` 书签,插入数据 | 指定处添加表格 `setTrackingMode` | `String, WebOfficeTrackingType` 用户名,类型 | 设置留痕模式 `addBookmarkForSelection` | `String` 书签 | 为鼠标选中内容设置为书签 `setTextStyle` | `String,String` 书签名,第二个参数取值:"标题、"引用"等,具体查看word的标题样式名称 | 调整指定书签内容的标题样式 `mergeDocs` | `WebOfficeMergeType, String[]`合并类型,合并文档URL | 合并其他文档至当前文档 `mergeDocsByBookmark` | `String,String[]` 书签,合并文档URL | 合并其他文档至当前文档选中页签处 `addTableColumns` | `String,String[][]` 书签,列数据 | 表格添加列数据 `addTableRows` | `String,String[][]` 书签,行数据 | 表格添加行数据 `setCheckBoxChecked` | `String,String…`是否选中,复选框 | 设置复选框值 `getAllCheckBoxs` | 无 | 获取文档中所有的复选框 `getTextByBookmark` | `String` 书签 | 依据书签获取文档内容 `isDocChanged` | 无 | 获取文档是否有改动 `getAllBookmarks` | 无 | 获取所有书签 `checkBookmark` | `String` 书签 | 查询书签是否存在 `showTracesBy` | `String,boolean` 用户名,是否显示修改痕迹 | 按照用户名是否显示某用户的修改痕迹 `showAllTraces` | `boolean` 是否显示 | 切换显示痕迹 `setEditableAreas` | `List<String>,String`书签,密码 | 设置文档可编辑区域,只有传递标签选中区域才能被当前用户编辑 `setDocUnLimitByRole` | `List<String>` 书签 | 取消文档可编辑区域,可编辑其他区域 `deleteSelectedAreaEditBookmark` | `String` 书签 | 删除编辑标签 `setSelectedAreaEditBookmark` | `String` 书签 | 对选中区域设置可编辑标签 `unLimitDoc` | `String` 密码 | 解除限制文档编辑 `limitDoc` | `String` 密码 | 限制文档编辑 `cancelProtectDoc` | `String` 密码 | 取消文档保护 `protectDoc` | `WebOfficeDocProtectionType, String` 保护类型,密码 | 文档保护 `showCommentDialog` | 无 | 弹出添加批注的框 `locateMark` | `String` 书签 | 定位书签 `deleteMarks` | `List<String>`书签列表 | 删除书签 `modifyMarks` | `List<WebOfficeMark>`书签列表 | 修改书签 `addMarks` | `WebOfficeMark` 书签 | 添加书签 `insertValue` | `String` 值 | 插入值 `insertValue` | `String,boolean` 值,是否换行 | 插入值 `insertPictures` | `List <WebOfficeImage>` | 插入图片, 支持批量操作 `compareFile` | `String,String,String, String` 第一个文档URL,第一个文挡名称,第二个文挡URL,第二个文档名称 | 比较文档 `sendIsFieldRevise` | `String` 书签 | 是否被修订 `setCaption` | `String` 标题 | 插入标题 `setMenubar` | `Boolean`是否显示 | 设置菜单栏是否显示 `setTitlebar` | `Boolean` 是否显示 | 设置标题栏是否显示 `setDocAsField` | `String` 书签 | 设置整个文档内容为书签 `setToolbars` | `Boolean` 是否显示 | 设置工具栏是否显示 `sendOpenStatus` | 无 | 获取文档打开状态 `reportData` | `Map<String,Object>` 数据 | 回调数据 `upload` | `Map<String, Object>` 文档上传成功后的相关信息 | 文档上传成功后上报接口 `afterClose` | `Map<String,Object>` 数据 | 数据发生改变,weboffice浏览器关闭后可触发关闭后事件 `addDataListener` | `WebOfficeDataListener` weboffice前端数据回调事件监听 | 添加前端数据回调事件 `addUploadListener` | `UploadListener` 上传事件监听器 | 添加上传事件 `getDataListeners` | 无 | 获取数据监听器 ## 5.2 前端指令 指令名 | 参数 | 返回后端参数 | 说明 :-------: | :-------: | :------: | :------: `openUrl` | ["WebOffice\:\/\/\|Officectrl\|<https://vip.kingdee.com/>"] | 无 | 打开webOffice控件弹窗并跳转到指定页面 `setCaption` | {"data":{"value":"标题栏文字"}} | 无 | 添加控件标题栏文字 `setTitlebar` | {"data":{"value":true\false}} | 无 | 设置是否显示标题栏 `setToolbars` | {"data":{"value":true\false}} | 无 | 设置是否显示工具栏 `setMenubar` | {"data":{"value":true\false}} | 无 | 设置菜单栏是否显示 `open` | {"data":{"url":"文档url","userName":"用户名","name":"文件名"}} | 无 | 打开Office文档包括(.doc、.docx、.xls、.xlsx),打开前先将本地Office窗口关闭 `openNew` | {"data":{"fileType":"Word.Document"}} | 无 | 新建空白word,excel,ppt文件,fileType可以是"Excel.Sheet","Word.Document","PowerPoint.Show" `save` | {"data":{"uploadUrl":"上传文件服务器地址(必须是完整url)","name":"文件名称(包含后缀)","id":"事件回调id"}} | 无 | 保存当前文档到服务器(本地文档应先通过附件上传至服务器) `close` | 无 | 无 | 关闭当前文档 `insertValue` |{"data":{"needEnterBefore":true\false是否需要在插入文本前添加回车换行(可触发office自动编号)}} | 无 | 在光标位置插入文本内容 `insertPictures` | {data: [{imageUrl: "https://example/image.webp", field: "fieldName1", imageStyle: { width: "50px", height: "50px" }}]} | 无 | 在指定位置插入图片,支持批量操作,imageUrl:图片地址;field:必填, 书签名,可选,值为空则在光标位置插入图片;imageStyle:图片宽高,width、height可以是"px"单位或者 "cm"单位, 如:{width:"50px", height:"50px"}(等价于{width:"50", height:"50"})、{width:"5cm", height:"5cm"} `addCommentDialog` | 无 | 无 | 在光标位置或选中文字处插入批注 `docCompare` | {"data":{"currentFile":"原文档名称.doc",currentFileUrl:"原文档url","compareFile":"比较文档名称.doc","compareFileUrl":"比较文档url"}} | 无 | 文本比较(暂不支持docx格式的文档比较),使用此功能需更改本地Office设置,比较结果会在本地Office打开 `addMark` | {"data":{"field":"书签名称","value":"{变量名称}"}} | 无 | 在光标位置插入一个书签,用于定义模板变量,书签即变量 `deleteMark` | {"data":[{"field":"书签名称1"}, { "field":"书签名称2"}]} | 无 | 删除文档中书签(支持批量删除) `modifyMark` | {"data":[{"field":"书签名称1", "value":"变量的值1"},{"field":"书签名称2","value":"变量的值2"}]} | 无 | 替换书签的值 (支持批量替换) `locateMark` | {"data":{"field":"书签名称1"}} | 无 | 定位到某个书签的位置 `mergeDocs` | {"data":{"field":书签名称", "mergeType":0光标位置\1文档开头\2文档结尾\3书签位置, "docsUrl":["文档的url"]}} | 无 | 合并文档,即在指定位置插入文档(原文档和合并文档的书签和复选框合并后仍可用) `docProtect` | {"data":{"isProtect": 0保护\1解除保护,"protectType":0只允许修订\1只允许添加批注\2完全保护,"password":"文档保护的密码"}} | 无 | isProtect参数设为0时,才能设置文档只允许修订\只允许添加批注\完全保护(不允许任何操作) `setDocLimit` | {"data":{"password":"密码"}} | 无 | 开启区域限制,开启后文档将被限制编辑,只有允许编辑的区域才能被编辑 `setDocUnLimit` | {"data":{"password":"密码"}} | 无 | 解除区域限制,文档恢复可编辑状态 `setSelectionEditArea` | {"data":{"field":"书签名称"}} | 无 | 设置选中区域为可编辑区域(选中区域将被设置为书签) `cancelSelectionEditArea` | {"data":{"field":"书签名称"}} | 无 | 取消选中区域的第一个书签内容的编辑状态(对应书签将被删除) `setDocLimitByRole` | {"data":{"field":["书签名称1", "书签名称2"],"password":"密码"}} | 无 | 批量设置书签内容为可编辑,并开启区域限制,其他区域将被锁定 `setDocUnLimitByRole` | {"data":[{"field":"书签名称1"}, {"field":"书签名称2"}]} | 无 | 批量取消取消书签内容的可编辑状态 `setSelectionAsField` | {"data":{"field":"书签名称"}} | 无 | 设置选中区域内容为书签 `setDocAsField` | {"data":{"field":"书签名称"}} | 无 | 设置整个文档内容为书签 `setTextAsTitle` | {"data":{"field":"书签名称","style":"标题 1"}} | 无 | 设置书签内容为标题1样式 `setCheckBoxValue` | {"data":[{"id":复选框id1,"value":true\false}, {"id":复选框id2,"value":true\false}]} | 无 | 批量修改复选框的值 `setDynamicTable` | {"data":{"field":"书签名称","tableData":[{"row":1,"column":2,"value":"123123"}, {"row":2,"column":2,"value":"123123"}],"tableSize":{"row":3,"column":2}}} | 无 | 在书签位置插入表格(tableData:表格数据,{"row":1,"column":2,"value":"123123"}表示第1行第2列的表格值为123123;tableSize:表格规格,{"row":3,"column":2}}表示表格规格为3行2列) `addTableColumns` | {"data":{"field":"表格所在的书签名", "newColumns":2, "newRowsData":[["123123" , "123123" ], ["123123" , "123123" ]]}} | 无 | 为指定的表格新增多列数据,需先将表格设为书签,否则默认是第一个表格 `addTableRows` | {"data":{"field":"表格所在的书签名", "newRows":2, "newRowsData":[["123123" , "123123" ], ["123123" , "123123" ]]}} | 无 | 为指定表格新增多行数据,需先将表格设为书签,否则默认是第一个表格 `setTrackingMode` | {"data":{"userName":"","trackType":1开启留痕模式并开始修订\0关闭留痕模式\4接受当前所有修订}} | 无 | 开启强制留痕模式,开启后所有修改痕迹将被记录 `showTracesByRole` | {"data":{userName: "用户名",isShow:true}} | 无 | 按用户名称显示、隐藏修改痕迹 `toggleShowTraces` | 无 | 无 | 切换显示痕迹(显示或隐藏修改痕迹) `sendTextByField` | {"data":{"field":"书签名称", id:"事件回调id"}} | {"result":"书签的文本内容","field":"书签名称"} | 根据书签名称获取文本内容并发送后端 `sendIsFieldRevise` | {"data":{"field":"书签名称", id:"事件回调id"}} | {"result":true\false,"field":"书签名称"} | 书签内容是否有任意改动(包含样式、批注等),并将结果发给后端 `sendFieldExist` | {"data":{"field":"书签名称", "id":"事件回调id" }} | {"result":true\false,"field":"书签名称"}] | 判断当前书签是否存在,并将结果发送给后端 `sendAllField` | {"data":{"id":"事件回调id" }} | ["书签名称1", "书签名称2"] | 获取当前文档所有书签,并将结果发送给后端 `sendIsDocChange` | {"data":{"id":"事件回调id" }} | true\false | 判断当前文档是否已更改,并将结果发送给后端 `sendAllCheckBox` | {"data":{"id":"事件回调id" }} | [{"id":复选框id, "value":true\false复选框的值, "title":"复选框标题"}] | 查找所有复选框,并将结果发送给后端 `sendOpenStatus` | {"data":{"id":"事件回调id" }} | true\false | 获取当前文档的打开状态,并将结果发送给后端 # 6 接口介绍及使用示例 ## 6.1 通用接口介绍及使用示例 ### 6.1.1 设置标题栏、工具栏、菜单栏、标题栏说明文字 可以在控件界面展示的相关设置。 ```java //显示标题栏 private void setTitlebar() { WebOffice webOffice = getControl("webofficeap"); webOffice.setTitlebar(true); } //显示工具栏 private void setToolbars() { WebOffice webOffice = getControl("webofficeap"); webOffice.setToolbars(true); } //显示菜单栏 private void setMenubar() { WebOffice webOffice = getControl("webofficeap"); webOffice.setMenubar(true); } //设置标题栏说明文字 private void setCaption() { Object data = getModel().getValue("txt_msg"); if(null == data){return;} WebOffice webOffice = getControl("webofficeap"); webOffice.setCaption(data.toString()); } ``` ### 6.1.2 打开、保存和关闭 打开、保存和关闭word、excel、ppt等文档的通用接口。 ```java //打开word、Excel、ppt等各种文档 private void openDoc (){ //这里的url可以是通过上传附件后获取到的url,也可以是本地文档url String url ="D://feature//bos_core//kd_bos//bos//webofficedemo//src//main//resources//docsUrl.xlsx"; WebOffice webOffice = getControl("webofficeap"); /** * WebOffice 调用openAll方法 * @param url 文件url * @param fileName 文件名 */ webOffice.openAll(url, "docsUrl.xlsx"); } //打开word文档 private void open() { String url ="D://feature//bos_core//kd_bos//bos//webofficedemo//src//main//resources//docsUrl.docx"; WebOffice webOffice = getControl("webofficeap"); webOffice.open(url); } //获取文档打开状态 private void sendOpenStatus() { WebOffice webOffice = getControl("webofficeap"); webOffice.sendOpenStatus(); } //文档保存到服务器 private void saveDoc() { String name = (String)getModel().getValue("name"); if(StringUtils.isBlank(name)){ getView().showErrorNotification("文件名不能为空"); return; } WebOffice webOffice = getControl("webofficeap"); webOffice.save(name); } //关闭文档 private void open() { WebOffice webOffice = getControl("webofficeap"); webOffice.close(); } ``` ## 6.2 Word文档接口介绍及使用示例 ### 6.2.1 模板变量 模板变量是将word文档中的某段内容当成变量,可根据后端数据进行内容的替换。如文档中的设置了内容变量: ${甲方},可根据后端数据将word文档中的 “${甲方}” 替换成某个字段的值,实现模板变量替换的功能。 变量通过插入书签方式实现,每个变量都是一个文档书签,也可将整个文档设为书签。注意: *由于word文档书签功能限制,书签前面的内容修改后将会设置成该书签的一部分,因此不允许在书签前面插入书签或做修改。建议把文档模板编辑完成后再进行变量的插入操作。 ```java /* *案例说明 *1.制作word模板时,先将模板编辑好,然后在文档中插入变量 *2.重新初始化文档时将文档变量替换成正式内容 */ //插入书签 private void addMarksTest(){ WebOffice webOffice = getControl("webofficeap"); String name = "name"; String value = "value"; /** * WebOffice 调用addMarks方法 * @param WebOfficeMark 书签 */ //插入书签 webOffice.addMarks(new WebOfficeMark(name, value)); } //变量替换 private void modifyMarksTest(){ WebOffice webOffice = getControl("webofficeap"); //这里是你处理你要修改的书签 DynamicObject tpl = BusinessDataServiceHelper.loadSingle(tplId,"test_wb_doc_templete"); DynamicObjectCollection tplVariables = tpl.getDynamicObjectCollection("entry_variable"); List<WebOfficeMark> marks = new ArrayList<>(); List<WebOfficeMark> marks = new ArrayList<>(); for (DynamicObject variable : tplVariables) { String map = variable.getString("variable_map"); String key = variable.getString("variable_key"); String value = StringUtil.toSafeString(doc.get(map)); //添加要修改的书签 marks.add(new WebOfficeMark(key,value)); } /** * WebOffice 调用modifyMarks方法 * @param List<WebOfficeMark> 修改的书签 */ webOffice.modifyMarks (marks); } //书签定位,实现跳转到文档指定位置 private void locateMark(int rowIndex) { String markKey = (String)getModel().getValue("doc_key",rowIndex); WebOffice webOffice = getControl("webofficeap"); webOffice.locateMark(markKey); } //删除书签 private void deleteMark(int rowIndex) { String markKey = (String)getModel().getValue("doc_key",rowIndex); WebOffice webOffice = getControl("webofficeap"); webOffice.deleteMarks(Arrays.asList(markKey)); getModel().deleteEntryRow("entryentity_doc", rowIndex); } //获取所有书签 private void getAllBookmarks() { WebOffice webOffice = getControl("webofficeap"); webOffice.getAllBookmarks(); } //检测书签是否存在 private void bookMarkCheck() { WebOffice webOffice = getControl("webofficeap"); String mark = (String)getModel().getValue("txt_mark"); if(StringUtils.isBlank(mark)){ getView().showErrorNotification("请先录入要插入表格处的书签"); return; } webOffice.checkBookmark(mark); } //获取当前书签的文本内容 private void getTxt() { WebOffice webOffice = getControl("webofficeap"); String mark = (String)getModel().getValue("txt_mark"); if(StringUtils.isBlank(mark)){ getView().showErrorNotification("请先录入要插入表格处的书签"); return; } webOffice.getTextByBookmark(mark); } //将选中内容设为书签 private void addBookmarkForSelection() { WebOffice webOffice = getControl("webofficeap"); webOffice.addBookmarkForSelection("bookmark"); this.getView().showSuccessNotification("添加书签成功!"); } //将整个文档设为书签 private void setDocAsField() { WebOffice webOffice = getControl("webofficeap"); webOffice.setDocAsField("bookMark"); } //查看书签内容是否存在修改痕迹 private void getFieldRevise() { WebOffice webOffice = getControl("webofficeap"); String mark = (String)getModel().getValue("txt_mark"); if(StringUtils.isBlank(mark)){ getView().showErrorNotification("请先录入要插入表格处的书签"); return; } webOffice.sendIsFieldRevise(mark); } ``` ### 6.2.2 批注 可以在word文档中插入批注。 ```java //插入批注 private void showCommentdialog() { WebOffice webOffice = getControl("webofficeap"); webOffice.showCommentDialog(); } ``` ### 6.2.3 表格 可以在word文档中指定位置动态插入指定行列数的表格,并填充表格数据。可动态修改指定表格数据或行列数,还可以给指定表格新增行列。 将表格设置为书签即可定位到指定的表格,然后对改表格进行相关操作。 ```java //在指定位置位置插入表格并初始化表格数据 private void addTable(String type) { String[][] tableDatas = { {"编号","姓名","年龄"}, {"1","张三","18"}, {"2","李四","20"}, {"3","王五","19"} }; WebOffice webOffice = getControl("webofficeap"); //在书签位置插入表格并初始化表格数据 if("bookmark".equals(type)){ String mark = (String)getModel().getValue("txt_mark"); if(StringUtils.isBlank(mark)){ getView().showErrorNotification("请先录入要插入表格处的书签"); return; } webOffice.addTable(tableDatas); }else{ //在光标位置插入表格并初始化表格数据 webOffice.addTable(tableDatas); } } //为表格增加两列数据 private void addTableColumns() { WebOffice webOffice = getControl("webofficeap"); String[][] tableDatas = { {"性别","男","女"}, {"身高","177","155"} }; webOffice.addTableColumns("bookmark", tableDatas ); } //为表格增加两行数据 private void addTableRows() { WebOffice webOffice = getControl("webofficeap"); String[][] tableDatas = { {"4","李六","18"}, {"5","吴七","18"} }; webOffice.addTableRows("bookmark", tableDatas ); } ``` ### 6.2.4 文档保护 对文档的内容进行保护,有只允许批注、完全保护等保护状态。 注意:*word文档的复选框在完全保护状态下仍能被改动。* ```java //文档只允许插入批注 private void protectDoc() { WebOffice webOffice = getControl("webofficeap"); webOffice.protectDoc(WebOfficeDocProtectionType.ONLY_COMMENT_ALLOWED,"webofficeap"); } //解除文档保护 private void unProtectedDoc() { WebOffice webOffice = getControl("webofficeap"); webOffice.cancelProtectDoc("webofficeap"); } ``` ### 6.2.5 文档留痕 开启留痕模式后将记录所有修订痕迹。 注意:*开启留痕模式后或者存在修订痕迹时,可能会使文档比对失败;获取书签内容的修改痕迹需要先开启留痕模式。* ```java //开启留痕模式,所有修改痕迹将被保留 private void startTracking() { String userName = RequestContext.get().getUserName(); webOffice.setTrackingMode(userName, WebOfficeTrackingType.TRACKING_EDIT); } //根据用户名隐藏修改痕迹 private void showTracking() { WebOffice webOffice = getControl("webofficeap"); String userName = RequestContext.get().getUserName(); webOffice.showTracesBy(userName, false); } //关闭留痕模式,所有新增修改痕迹都不会保留,但已有痕迹会保留 private void closeTracking() { String userName = RequestContext.get().getUserName(); // webOffice.setTrackingMode(userName, WebOfficeTrackingType.TRACKING_EDIT); } //切换显示痕迹 private void closeTracking() { } ``` ### 6.2.6 文档合并 往当前打开文档指定位置插入另一个文档。文档合并会将合并文档中的复选框、书签等合并到当前文档。 ```java //合并文档 private void mergeDocs() { WebOffice webOffice = getControl("webofficeap"); String[] docsUrl = new String[1]; String currentPath = getClass().getResource(".").getFile().toString(); String url = currentPath; url = url.substring(1); url = url.replace("webofficedemo/bin/main/com/kd/demo/weboffice/", "webofficedemo/src/main/resources/docsUrl.docx"); url = url.replace("/", "//"); docsUrl[0] = url; //在当前文档光标位置插入文档 webOffice.mergeDocs( WebOfficeMergeType.cursor,docsUrl); } ``` ### 6.2.7 文档比较 将两个word文档进行比较,比较结果将在本地Office/WPS中打开。 文档比较需要更改本地Office/WPS的宏安全性设置,WPS个人版还需安装VBA环境。 ```java private void compareFile (){ FormShowParameter param = getView().getFormShowParameter(); String url1 = param.getCustomParam("url1"); String fileName1 = param.getCustomParam("fileName1"); String url2 = param.getCustomParam("url2"); String fileName2 = param.getCustomParam("fileName2"); WebOffice webOffice = getControl("webofficeap"); /** * WebOffice 调用compareFile方法 * @param String 第一个文档url * @param String 第一个文档文件名 * @param String 第二个文档url * @param String 第二个文档文件名 */ webOffice.compareFile(url1,fileName1,url2,fileName2); } ``` ### 6.2.8 区域限制编辑 不同用户可分别编辑不同的文档区域。 ```java /* *案例说明 *1.管理员编辑word模板时先选中可编辑的区域,将选中区域设为可编辑区域 *2.为不同用户分配可编辑区域,选中用户甲方,再选中书签列表对应可编辑部分并保存 *3.甲方打开文档时,只有设为可编辑的区域才允许编辑 */ //管理员将选中内容设为可编辑区域 private void setAreaEditRole() { WebOffice webOffice = getControl("webofficeap"); webOffice.setSelectedAreaEditBookmark(mark); } //管理员删除可编辑区域 private void setAreaEditRole() { WebOffice webOffice = getControl("webofficeap"); webOffice.deleteSelectedAreaEditBookmark(mark); } //为甲方分配可编辑区域并开启区域保护 private void setDocLimitByRole() { WebOffice webOffice = getControl("webofficeap"); List<String> bookmarks= new ArrayList<>(); //为甲方分配可编辑区域为“bookmark1”,“bookmark2” bookmarks.add("bookmark1"); bookmarks.add("bookmark2"); //根据可编辑区域开启区域保护(可在甲方打开文档初始化时执行此操作) webOffice.setEditableAreas(bookmarks,"123456"); } //管理员取消文档的区域限制 private void unlimitDoc() { WebOffice webOffice = getControl("webofficeap"); webOffice.unLimitDoc("webofficeap"); } //管理员开启区域限制 private void limitDoc() { WebOffice webOffice = getControl("webofficeap"); webOffice.limitDoc("webofficeap"); } ``` ### 6.2.9 复选框 ```java /* *案例说明 *1.插入复选框时,需要添加对应标题。 *2.获取复选框列表,根据标题将复选框和对应字段绑定 *3.重新设置复选框的值 */ //获取所有复选框 private void getAllCheckbox() { WebOffice webOffice = getControl("webofficeap"); webOffice.getAllCheckBoxs(); } //改变复选框的值 private void setCheckBox(boolean flag) { WebOffice webOffice = getControl("webofficeap"); String checkboxId = (String)getModel().getValue("txt_checkboxid"); if(StringUtils.isBlank(checkboxId)){ getView().showErrorNotification("请先录入checkbox Id"); return; } webOffice.setCheckBoxChecked(flag, checkboxId); } ``` ### 6.2.10 设置内容为标题样式 ```java private void setTextStyle() { WebOffice webOffice = getControl("webofficeap"); String type = (String) this.getModel().getValue("type"); if(type!=null&&type.length()>0){ webOffice.setTextStyle("bookmark", type); }else{ this.getView().showMessage("请先选择标题类别"); } } ``` ### 6.2.11 插入文本内容 ```java //当前光标插入文本内容 private void insertValue() { Object data = getModel().getValue("txt_msg"); if(null == data){return;} WebOffice webOffice = getControl("webofficeap"); webOffice.insertValue(data.toString(),true); } ``` ### 6.2.12 插入图片 ```java public class WebOfficeSample extends AbstractFormPlugin { private void insertPictures(){      WebOffice webOffice = getControl("webofficeap");      List<WebOfficeImage> list = new ArrayList<>();      WebOfficeImage wi = new WebOfficeImage(); //插入图片的地址          wi.setImageUrl(UrlService.getDomainContextUrl()+"/images/pc/emotion/qgh.webp"); //插入图片的宽高,单位可不填可为px也可为cm      WebOfficeImageStyle s = new WebOfficeImageStyle();      s.setHeight("20px");      s.setWidth("20px");      wi.setImageStyle(s); //可根据书签插入,也可不设置,在光标位置插入 wi.setField("bookmark");      list.add(wi);     webOffice.insertPictures(list);   } } ``` ### 6.2.13 文档是否改动 ```java //获取当前文档内容是否修改 private void checkDocChange() { WebOffice webOffice = getControl("webofficeap"); webOffice.isDocChanged(); } ``` # 7 常见问题及处理方法 *一般问题排查思路,请看7.10。* ## 7.1 webOffice控件支持谷歌、火狐等其他非IE内核浏览器吗? > 需要在开发平台上实时预览包含webOffice控件的单据时,仅支持在IE上预览,开发者在开发时可在IE上进行调试。正式使用时,调用已经安装好的webOffice控件弹窗,则与浏览器无关联。但是,webOffice控件弹窗依赖于本地IE。也就是说只需要本地安装好webOffice组件、office办公软件和IE(11及以上版本)即可在任意浏览器打开webOffice。 ## 7.2 文档无法打开? ![image.webp](/download/010060983d4fdb4941659ec5f49f3a1b00d6.webp) > 如执行打开文档操作后,出现上图情况(编辑窗口的工具栏可见,但内容区域空白),无法正常看到文档,请先关闭本地Office窗口。 ## 7.3 文档正常打开, 但是界面显示异常无法正常编辑? > 产生这一问题主要原因是Window应用程序兼容性设置有关,依次执行以下步骤。 步骤一:进入WebOffice安装文件夹,找到tool文件夹里的WebOfficeBrowser.exe,鼠标右键选择"属性"菜单,找到"兼容性"面板,见下图: ![image.webp](/download/01001fed0885dfa84e51b4d7bd4c90de6b54.webp) 步骤二:点击"兼容性面板"中的按钮"更改高DPI设置"后,见下图 ![image.webp](/download/0100884d42bca97a4a609a42955fbfad93c2.webp) 步骤三:在弹出的界面中勾选"替代高DPI缩放行为"选项 ![image.webp](/download/0100384aa025833748de854874a23578303c.webp) ## 7.4 一直提示下载WebOffice,但WebOffice正常打开? > 重新安装WebOffice组件至C盘或D盘的根目录;关闭安装的杀毒软件,然后重新安装。 ## 7.5 WPS2019无法正常打开文档,应如何更改本地设置? > 依次执行以下步骤,然后重启电脑。 步骤一:在WPS软件的设置菜单中点击"配置和修复工具"菜单选项。 ![image.webp](/download/010072365e493f7f411599a5c6278ca15d58.webp) 步骤二:在弹出界面中点击"高级"按钮。 ![image.webp](/download/0100eb89350781d8469fb58138c6154592ee.webp) 步骤三:在弹出界面的"兼容设置"面板中勾选“与Microsoft Office 2007 兼容”选项。 ![image.webp](/download/0100528eef3180424f179f9db82ef06c310f.webp) 步骤四:切换到"重置修复"面板,点击"重置插件"和"重新注册组件"按钮。 ![image.webp](/download/0100e48ae59fc3a84191b0655cb2344ea0fd.webp) ## 7.6 使用文档对比功能,本地Office\WPS如何设置? > Office设置 步骤一:打开菜单:文件->选项。 ![image.webp](/download/010035f89e2da0bd4822880a7fcbdd276242.webp) 步骤二:在"选项"界面选择 信任中心->信任中心设置。 ![image.webp](/download/0100fa3c892f25934957828e427897dc4e60.webp) 步骤三:在弹出的界面中选择菜单:宏设置->勾选“启用所有宏”和“信任对VBA工程对象模型的访问” ![image.webp](/download/0100ff753c52aa2a464bbec85f8288fe5f17.webp) > WPS设置(由于WPS个人版没有VBA环境,无法运行比较文档的宏,请先下载安装wps vba宏插件) 步骤一:打开菜单:文件->选项。 ![image.webp](/download/0100eef481eaef354b6da49e439feb1a453a.webp) 步骤二:在"选项"界面选择 信任中心->勾选“启用宏后自动添加为受信任的文档”。 ![image.webp](/download/0100b6e103115c2b452383320225747838f3.webp) 步骤三:信任中心->宏安全性->安全级设为“低”。 ![image.webp](/download/010050afdbc5738f4f83b6a205283d5bb19c.webp) 步骤四:信任中心->宏安全性->可靠发行商->勾选“信任对于“Visual Basic 项目”的访问”。 ![image.webp](/download/0100c9444b72a3304fa8abd4a4226e9139e2.webp) ## 7.7 提示浏览器需要升级? > 把IE升级至最新版本,然后重新安装WebOffice组件。 ## 7.8 如何插入复选框? 先更改一下设置,文件 -> 选项 -> 设置 -> 自定义功能区 把"开发工具"勾上 ![image.webp](/download/0100cede333e7b7142dfb3d905a08bb687a8.webp) 插入复选框(工具栏的"开发工具"分组下点击复选框图标按钮) ![image.webp](/download/01005a5f17c853494e0da6954e8a45ea61e3.webp) 添加复选框标题(选中插入的复选框对象,点击工具栏“开发工具”分组下的“控件属性”按钮) ![image.webp](/download/010012d18850900e4761912577e382ac55ff.webp) ## 7.9 文档对比失败原因? > 文档可能已损坏,请先在本地office/wps执行文档比较,看功能是否正常;包含修订痕迹或开启了留痕模式;本地没有设置相关宏安全性内容;未安装VBA环境,WPS个人版不包含此运行环境。 ## 7.10 一般问题排查思路 ### 1.保证weboffice安装正确 >安装前,请关闭安装的杀毒软件或将weboffice加入信任区。将解压包放入C或D盘根目录。如下图 ![weboffice1.webp](/download/0100431fc249d20e4d5fa29451db81ff1436.webp) >如双击WebOffice_Setup未能正常安装,请按照解压包中的使用说明进行安装,安装后双击tool下curruser.reg执行“是” ![weboffice2.webp](/download/010029a12099859b4ab5b9574cbec2895d6b.webp) 如需重新安装,请先双击uninstall.bat进行卸载,再按上述步骤进行安装。 ### 2.看下本地wps和word是否有问题 >wps如有问题可参考7.5进行修复 >word有问题可在计算机设置中进行修复(在系统应用中找到office,选择“修复”进行处理),如下图 ![weboffice4.webp](/download/0100bbb4e2a3cc7f4690818ad8b3cf5cc3d0.webp) ### 3.看下本地IE打开环境是否有问题 >如有问题可进行修复,找到IE中Internet选项>高级,点击"**还原高级设置"、"重置**",然后重启计算机。 ![weboffice3.webp](/download/0100d376af80ba4440a1acb69f6501a37ca1.webp) ## 7.11 一些IE问题处理方法 ### 1.提示“无法安全的连接此页面” >访问某些比较老旧的网站时,有时候会无法安全地连接,并且会弹出错误提示“该站点使用过期的或不安全的TLS安全设置” >解决方案:浏览器设置->“Internet选项”->“高级”选项卡->勾选“SSL 3.0”、“TLS 1.0”、“TLS 1.1”、“TLS 1.2”->重启电脑 ### 2.IE只能访问http地址,https不能访问 >解决方案:浏览器设置->“Internet选项”->“高级”选项卡->“SSL 3.0”、“TLS 1.0”不勾选->重启电脑 ### 3. 确认ie浏览器版本 >https://developer.kingdee.com/article/392843626016870912?productLineId=1&isKnowledge=2&lang=zh-CN ### 4. win11打开ie方法 请自行百度 ## 7.12 具体问题解决示例 ### 1. weboffice选择标签无法插入到文档 * PS:该处理方式,适用于业务开发的一切功能 * 1. 保证weboffice正确安装(参考上述7.10中1) * 2. 该功能一般为业务开发,可交相关业务排查,或排查后端指令是否正常发到前端 # 8 附件

WebOffice.zip

webofficedemo.zip

WebOffice

# 1 功能介绍支持word、excel文档的在线编辑、保存、模板变量定义和替换等操作,Office文档和金蝶云苍穹实现无缝对接。# 2 控件对象`kd...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息