【企业微信】新增管理表格内容相🆕 #3837 【企业微信】微文档(WeDoc)服务新增了三个管理表格内容的 API 接口,包括批量更新表格内容、获取表格行列信息以及获取指定范围的表格数据

This commit is contained in:
Noctis_nkt
2026-01-09 14:18:23 +08:00
committed by GitHub
parent 72fa3b3301
commit e27325f580
8 changed files with 815 additions and 0 deletions

View File

@@ -78,4 +78,53 @@ public interface WxCpOaWeDocService {
* @throws WxErrorException the wx error exception * @throws WxErrorException the wx error exception
*/ */
WxCpDocShare docShare(@NonNull String docId) throws WxErrorException; WxCpDocShare docShare(@NonNull String docId) throws WxErrorException;
/**
* 编辑表格内容
* 该接口可以对一个在线表格批量执行多个更新操作
* <p>
* 注意:
* 1.批量更新请求中的各个操作会逐个按顺序执行,直到全部执行完成则请求返回,或者其中一个操作报错则不再继续执行后续的操作
* 2.每一个更新操作在执行之前都会做请求校验(包括权限校验、参数校验等等),如果校验未通过则该更新操作会报错并返回,不再执行后续操作
* 3.单次批量更新请求的操作数量 <= 5
* <p>
* 请求方式POSTHTTPS
* 请求地址: https://qyapi.weixin.qq.com/cgi-bin/wedoc/spreadsheet/batch_update?access_token=ACCESS_TOKEN
*
* @param request 编辑表格内容请求参数
* @return 编辑表格内容批量更新的响应结果
* @throws WxErrorException the wx error exception
*/
WxCpDocSheetBatchUpdateResponse docBatchUpdate(@NonNull WxCpDocSheetBatchUpdateRequest request) throws WxErrorException;
/**
* 获取表格行列信息
* 该接口用于获取在线表格的工作表、行数、列数等。
* <p>
* 请求方式POSTHTTPS
* 请求地址: https://qyapi.weixin.qq.com/cgi-bin/wedoc/spreadsheet/get_sheet_properties?access_token=ACCESS_TOKEN
*
* @param docId 在线表格的docid
* @return 返回表格行列信息
* @throws WxErrorException
*/
WxCpDocSheetProperties getSheetProperties(@NonNull String docId) throws WxErrorException;
/**
* 本接口用于获取指定范围内的在线表格信息,单次查询的范围大小需满足以下限制:
* <p>
* 查询范围行数 <=1000
* 查询范围列数 <=200
* 范围内的总单元格数量 <=10000
* <p>
* 请求方式POSTHTTPS
* 请求地址: https://qyapi.weixin.qq.com/cgi-bin/wedoc/spreadsheet/get_sheet_range_data?access_token=ACCESS_TOKEN
*
* @param request 获取指定范围内的在线表格信息请求参数
* @return 返回指定范围内的在线表格信息
* @throws WxErrorException
*/
WxCpDocSheetData getSheetRangeData(@NonNull WxCpDocSheetGetDataRequest request) throws WxErrorException;
} }

View File

@@ -63,4 +63,27 @@ public class WxCpOaWeDocServiceImpl implements WxCpOaWeDocService {
String responseContent = this.cpService.post(apiUrl, jsonObject.toString()); String responseContent = this.cpService.post(apiUrl, jsonObject.toString());
return WxCpDocShare.fromJson(responseContent); return WxCpDocShare.fromJson(responseContent);
} }
@Override
public WxCpDocSheetBatchUpdateResponse docBatchUpdate(@NonNull WxCpDocSheetBatchUpdateRequest request) throws WxErrorException {
String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(WEDOC_SPREADSHEET_BATCH_UPDATE);
String responseContent = this.cpService.post(apiUrl, request.toJson());
return WxCpDocSheetBatchUpdateResponse.fromJson(responseContent);
}
@Override
public WxCpDocSheetProperties getSheetProperties(@NonNull String docId) throws WxErrorException {
String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(WEDOC_SPREADSHEET_GET_SHEET_PROPERTIES);
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("docid", docId);
String responseContent = this.cpService.post(apiUrl, jsonObject.toString());
return WxCpDocSheetProperties.fromJson(responseContent);
}
@Override
public WxCpDocSheetData getSheetRangeData(@NonNull WxCpDocSheetGetDataRequest request) throws WxErrorException {
String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(WEDOC_SPREADSHEET_GET_SHEET_RANGE_DATA);
String responseContent = this.cpService.post(apiUrl, request.toJson());
return WxCpDocSheetData.fromJson(responseContent);
}
} }

View File

@@ -0,0 +1,199 @@
package me.chanjar.weixin.cp.bean.oa.doc;
import java.io.Serializable;
import java.util.List;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;
import me.chanjar.weixin.cp.bean.oa.doc.WxCpDocSheetData.GridData;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
/**
* 编辑表格内容请求
*
* @author zhongying
* @since 2026-01-07
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class WxCpDocSheetBatchUpdateRequest implements Serializable {
private static final long serialVersionUID = 584565591133421347L;
/**
* 文档的docid.必填
*/
@SerializedName("docid")
private String docId;
/**
* 更新操作列表.必填
*/
@SerializedName("requests")
private List<Request> requests;
/**
* From json wx cp doc sheet batch update request.
*
* @param json the json
* @return the wx cp doc sheet batch update request
*/
public static WxCpDocSheetBatchUpdateRequest fromJson(String json) {
return WxCpGsonBuilder.create().fromJson(json, WxCpDocSheetBatchUpdateRequest.class);
}
/**
* To json string.
*
* @return the string
*/
public String toJson() {
return WxCpGsonBuilder.create().toJson(this);
}
/**
* 更新操作
*/
@Getter
@Setter
public static class Request implements Serializable {
private static final long serialVersionUID = 253933038745894628L;
/**
* 新增工作表
*/
@SerializedName("add_sheet_request")
private AddSheetRequest addSheetRequest;
/**
* 删除工作表请求
*/
@SerializedName("delete_sheet_request")
private DeleteSheetRequest deleteSheetRequest;
/**
* 更新范围内单元格内容
*/
@SerializedName("update_range_request")
private UpdateRangeRequest updateRangeRequest;
/**
* 删除表格连续的行或列
*/
@SerializedName("delete_dimension_request")
private DeleteDimensionRequest deleteDimensionRequest;
/**
* 新增工作表,新增需满足以下限制
* 范围列数 <=200
* 范围内的总单元格数量 <=10000
*/
@Getter
@Setter
public static class AddSheetRequest implements Serializable {
private static final long serialVersionUID = 523704967699486288L;
/**
* 工作表名称
*/
@SerializedName("title")
private String title;
/**
* 新增工作表的初始行数
*/
@SerializedName("row_count")
private int rowCount;
/**
* 新增工作表的初始列数
*/
@SerializedName("column_count")
private int columnCount;
}
/**
* 删除工作表请求
*/
@Getter
@Setter
public static class DeleteSheetRequest implements Serializable {
private static final long serialVersionUID = 767974765396168274L;
/**
* 工作表唯一标识
*/
@SerializedName("sheet_id")
private String sheetId;
}
/**
* 更新范围内单元格内容
*/
@Getter
@Setter
public static class UpdateRangeRequest implements Serializable {
private static final long serialVersionUID = 433859595039061888L;
/**
* 工作表唯一标识
*/
@SerializedName("sheet_id")
private String sheetId;
/**
* 表格数据
*/
@SerializedName("grid_data")
private GridData gridData;
}
/**
* 删除表格连续的行或列
* 注意:
* 1.该操作会导致表格缩表
* 2.删除的范围遵循 左闭右开 ———— [start_index,end_index) ,如果 end_index <= start_index
* 则该请求报错。
*/
@Getter
@Setter
public static class DeleteDimensionRequest implements Serializable {
private static final long serialVersionUID = 107245521502978033L;
/**
* 工作表唯一标识
*/
@SerializedName("sheet_id")
private String sheetId;
/**
* 删除的维度类型.
* ROW:行
* COLUMN
*/
@SerializedName("dimension")
private String dimension;
/**
* 删除行列的起始序号从1开始
*/
@SerializedName("start_index")
private int startIndex;
/**
* 删除行列的终止序号从1开始
*/
@SerializedName("end_index")
private int endIndex;
}
}
}

View File

@@ -0,0 +1,126 @@
package me.chanjar.weixin.cp.bean.oa.doc;
import java.io.Serializable;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import me.chanjar.weixin.cp.bean.oa.doc.WxCpDocSheetProperties.Properties;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
/**
* 更新操作(UpdateRequest])对应的响应结构体类型
*
* @author zhongying
* @since 2026-01-08
*/
@Data
public class WxCpDocSheetBatchUpdateResponse implements Serializable {
private static final long serialVersionUID = 781694717017131015L;
/**
* 新增工作表响应
*/
@SerializedName("add_sheet_response")
private AddSheetResponse addSheetResponse;
/**
* 删除工作表响应
*/
@SerializedName("delete_sheet_response")
private DeleteSheetResponse deleteSheetResponse;
/**
* 更新范围内单元格内容响应
*/
@SerializedName("update_range_response")
private UpdateRangeResponse updateRangeResponse;
/**
* 删除表格连续的行或列响应
*/
@SerializedName("delete_dimension_response")
private DeleteDimensionResponse deleteDimensionResponse;
/**
* 从 JSON 字符串反序列化为 WxCpDocSheetBatchUpdateResponse 对象。
*
* @param json the json
* @return 反序列化得到的 WxCpDocSheetBatchUpdateResponse 对象
*/
public static WxCpDocSheetBatchUpdateResponse fromJson(String json) {
return WxCpGsonBuilder.create().fromJson(json, WxCpDocSheetBatchUpdateResponse.class);
}
/**
* To json string.
*
* @return the string
*/
public String toJson() {
return WxCpGsonBuilder.create().toJson(this);
}
/**
* 新增工作表响应
*/
@Getter
@Setter
public static class AddSheetResponse implements Serializable {
private static final long serialVersionUID = 618814209485621336L;
/**
* 新增子表的属性
*/
@SerializedName("properties")
private Properties properties;
}
/**
* 删除工作表响应
*/
@Getter
@Setter
public static class DeleteSheetResponse implements Serializable {
private static final long serialVersionUID = 625927337093938411L;
/**
* 被删除的工作表的唯一标识
*/
@SerializedName("sheet_id")
private String sheetId;
}
/**
* 更新范围内单元格内容响应
*/
@Getter
@Setter
public static class UpdateRangeResponse implements Serializable {
private static final long serialVersionUID = 180842641209787414L;
/**
* 数据更新的成功的单元格数量
*/
@SerializedName("updated_cells")
private int updatedCells;
}
/**
* 删除表格连续的行(或列),请求响应体结构
*/
@Getter
@Setter
public static class DeleteDimensionResponse implements Serializable {
private static final long serialVersionUID = 107245521502978033L;
/**
* 被删除的行数(或列数)
*/
@SerializedName("deleted")
private int deleted;
}
}

View File

@@ -0,0 +1,260 @@
package me.chanjar.weixin.cp.bean.oa.doc;
import java.io.Serializable;
import java.util.List;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
/**
* 获取表格数据
*
* @author zhongying
* @since 2026-01-07
*/
@Data
public class WxCpDocSheetData extends WxCpBaseResp implements Serializable {
private static final long serialVersionUID = 498054945993671723L;
/**
* 返回data
*/
@SerializedName("grid_data")
private GridData gridData;
/**
* From json sheet data.
*
* @param json the json
* @return the sheet data
*/
public static WxCpDocSheetData fromJson(String json) {
return WxCpGsonBuilder.create().fromJson(json, WxCpDocSheetData.class);
}
/**
* To json string.
*
* @return the string
*/
@Override
public String toJson() {
return WxCpGsonBuilder.create().toJson(this);
}
/**
* 表格数据
*/
@Getter
@Setter
public static class GridData implements Serializable {
private static final long serialVersionUID = 389887488098521821L;
/**
* 起始行编号 从0开始计算
*/
@SerializedName("start_row")
private int startRow;
/**
* 起始列编号 从0开始计算
*/
@SerializedName("start_column")
private int startColumn;
/**
* 各行的数据
*/
@SerializedName("rows")
private List<RowData> rows;
/**
* 行数据
*/
@Getter
@Setter
public static class RowData implements Serializable {
private static final long serialVersionUID = 225648868492722337L;
/**
* 各个单元格的数据内容
*/
@SerializedName("values")
private List<CellData> values;
/**
* 单元格的信息
*/
@Getter
@Setter
public static class CellData implements Serializable {
private static final long serialVersionUID = 656471192719707304L;
/**
* 单元格的数据内容
*/
@SerializedName("cell_value")
private CellValue cellValue;
/**
* 单元格的样式信息
*/
@SerializedName("cell_format")
private CellFormat cellFormat;
/**
* 单元格的数据内容暂时只支持文本、链接一个CellValue中只能选填一个字段
*/
@Getter
@Setter
public static class CellValue implements Serializable {
private static final long serialVersionUID = 656471192719707304L;
/**
* 文本
*/
@SerializedName("text")
private String text;
/**
* 链接
*/
@SerializedName("link")
private Link link;
/**
* 链接
*/
@Getter
@Setter
public static class Link implements Serializable {
private static final long serialVersionUID = 912896452879347178L;
/**
* 链接url
*/
@SerializedName("url")
private String url;
/**
* 链接标题
*/
@SerializedName("text")
private String text;
}
}
/**
* 单元格的样式信息
*/
@Getter
@Setter
public static class CellFormat implements Serializable {
private static final long serialVersionUID = 656471192719707304L;
/**
* 文字样式
*/
@SerializedName("text_format")
private TextFormat textFormat;
/**
* 文字样式
*/
@Getter
@Setter
public static class TextFormat implements Serializable {
private static final long serialVersionUID = 184358104921122206L;
/**
* 字体
*/
@SerializedName("font")
private String font;
/**
* 字体大小最大72
*/
@SerializedName("font_size")
private int fontSize;
/**
* 字体加粗
*/
@SerializedName("bold")
private boolean bold;
/**
* 斜体
*/
@SerializedName("italic")
private boolean italic;
/**
* 字体删除线
*/
@SerializedName("strikethrough")
private boolean strikethrough;
/**
* 字体下划线
*/
@SerializedName("underline")
private boolean underline;
/**
* 字体颜色
*/
@SerializedName("color")
private Color color;
/**
* 字体颜色
*/
@Getter
@Setter
public static class Color implements Serializable {
private static final long serialVersionUID = 140418085882147315L;
/**
* 红色,取值范围:[0,255]
*/
@SerializedName("red")
private int red;
/**
* 绿色,取值范围:[0,255]
*/
@SerializedName("green")
private int green;
/**
* 蓝色,取值范围:[0,255]
*/
@SerializedName("blue")
private int blue;
/**
* alpha通道取值范围[0,255]默认值为255完全不透明
*/
@SerializedName("alpha")
private int alpha;
}
}
}
}
}
}
}

View File

@@ -0,0 +1,64 @@
package me.chanjar.weixin.cp.bean.oa.doc;
import java.io.Serializable;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
/**
* 获取表格数据请求
*
* @author zhongying
* @since 2026-01-07
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class WxCpDocSheetGetDataRequest implements Serializable {
private static final long serialVersionUID = 827718590347822812L;
/**
* 在线表格唯一标识.必填
*/
@SerializedName("docid")
private String docId;
/**
* 工作表ID工作表的唯一标识.必填
*/
@SerializedName("sheet_id")
private String sheetId;
/**
* 查询的范围,格式为"A1:B2"表示获取A1到B2单元格的数据.必填
*/
@SerializedName("range")
private String range;
/**
* From json to {@link WxCpDocSheetGetDataRequest}.
*
* @param json the json string representing {@link WxCpDocSheetGetDataRequest}
* @return the {@link WxCpDocSheetGetDataRequest} object
*/
public static WxCpDocSheetGetDataRequest fromJson(String json) {
return WxCpGsonBuilder.create().fromJson(json, WxCpDocSheetGetDataRequest.class);
}
/**
* To json string.
*
* @return the string
*/
public String toJson() {
return WxCpGsonBuilder.create().toJson(this);
}
}

View File

@@ -0,0 +1,79 @@
package me.chanjar.weixin.cp.bean.oa.doc;
import java.io.Serializable;
import java.util.List;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
/**
* 获取表格行列信息
*
* @author zhongying
* @since 2026-01-07
*/
@Data
public class WxCpDocSheetProperties extends WxCpBaseResp implements Serializable {
private static final long serialVersionUID = 666707252457243065L;
@SerializedName("properties")
private List<Properties> properties;
/**
* From json sheet properties.
*
* @param json the json
* @return the sheet properties
*/
public static WxCpDocSheetProperties fromJson(String json) {
return WxCpGsonBuilder.create().fromJson(json, WxCpDocSheetProperties.class);
}
/**
* To json string.
*
* @return the string
*/
public String toJson() {
return WxCpGsonBuilder.create().toJson(this);
}
/**
* 工作表属性
*/
@Getter
@Setter
public static class Properties implements Serializable {
private static final long serialVersionUID = 640301090538839892L;
/**
* 工作表ID工作表的唯一标识
*/
@SerializedName("sheet_id")
private String sheetId;
/**
* 工作表名称
*/
@SerializedName("title")
private String title;
/**
* 表格的总行数
*/
@SerializedName("row_count")
private int rowCount;
/**
* 表格的总列数
*/
@SerializedName("column_count")
private int columnCount;
}
}

View File

@@ -575,6 +575,21 @@ public interface WxCpApiPathConsts {
*/ */
String WEDOC_DOC_SHARE = "/cgi-bin/wedoc/doc_share"; String WEDOC_DOC_SHARE = "/cgi-bin/wedoc/doc_share";
/**
* The constant WEDOC_SPREADSHEET_BATCH_UPDATE.
*/
String WEDOC_SPREADSHEET_BATCH_UPDATE = "/cgi-bin/wedoc/spreadsheet/batch_update";
/**
* The constant WEDOC_SPREADSHEET_GET_SHEET_PROPERTIES.
*/
String WEDOC_SPREADSHEET_GET_SHEET_PROPERTIES = "/cgi-bin/wedoc/spreadsheet/get_sheet_properties";
/**
* The constant WEDOC_SPREADSHEET_GET_SHEET_RANGE_DATA.
*/
String WEDOC_SPREADSHEET_GET_SHEET_RANGE_DATA = "/cgi-bin/wedoc/spreadsheet/get_sheet_range_data";
/** /**
* 邮件 * 邮件
* https://developer.work.weixin.qq.com/document/path/95486 * https://developer.work.weixin.qq.com/document/path/95486