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
# 1 功能介绍支持word、excel文档的在线编辑、保存、模板变量定义和替换等操作,Office文档和金蝶云苍穹实现无缝对接。# 2 控件对象`kd...
点击下载文档
上一篇:基础资料字段下一篇:简约美观的移动端步骤条,你值得拥有!
本文2024-09-23 00:39:56发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-140940.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章