This commit is contained in:
Leo
2026-02-04 16:34:35 +08:00
parent fe214e689a
commit 42ee33577e
3 changed files with 142 additions and 13 deletions

View File

@@ -219,31 +219,45 @@ public class WPS365ApiServiceImpl implements IWPS365ApiService {
@Override
public JSONObject readAirSheetCells(String accessToken, String fileId, String worksheetId, String range) {
// 智能表格(AirSheet)与在线表格(KSheet)使用同一 API 基址;openapi.wps.cn/v7/airsheet 已 404改用 api/v1 + openapi/airsheet(与 KSheet 路径风格一致
// 智能表格(AirSheet)openapi.wps.cnairsheet 接口目前均返回 404先试 AirSheet 再回退到 KSheet(同一 fileId 作为 file_token 试读
String baseUrl = wps365Config.getApiBaseUrl();
int sheetIdx = parseSheetIndex(worksheetId, fileId);
// 方案1与 KSheet 一致的路径 GET /openapi/airsheet/{fileId}/sheets/{sheetIdx}/cells?range=...
// 方案1AirSheet 路径 GET /openapi/airsheet/{fileId}/sheets/{sheetIdx}/cells
try {
String url = baseUrl + "/openapi/airsheet/" + fileId + "/sheets/" + sheetIdx + "/cells";
if (range != null && !range.trim().isEmpty()) {
url += "?range=" + java.net.URLEncoder.encode(range, "UTF-8");
}
log.debug("读取AirSheet - url: {}, fileId: {}, sheetIdx: {}, range: {}", url, fileId, sheetIdx, range);
log.debug("读取AirSheet - url: {}, fileId: {}, sheetIdx: {}", url, fileId, sheetIdx);
return WPS365ApiUtil.httpRequest("GET", url, accessToken, null);
} catch (Exception e) {
log.warn("AirSheet api/v1 路径失败,尝试 v7 - {}", e.getMessage());
log.warn("AirSheet 接口 404 或失败,尝试 KSheet 回退 - {}", e.getMessage());
}
// 方案2兼容旧版 v7 路径(若官方恢复或环境不同)
// 方案2用同一 ID 走 KSheet在线表格接口——若文档在「文件列表」里以 KSheet 形式存在则可用
try {
String url = baseUrl + "/openapi/ksheet/" + fileId + "/sheets/" + sheetIdx + "/cells";
if (range != null && !range.trim().isEmpty()) {
url += "?range=" + java.net.URLEncoder.encode(range, "UTF-8");
}
log.debug("回退到 KSheet 读取 - url: {}, fileId 作 file_token: {}", url, fileId);
return WPS365ApiUtil.httpRequest("GET", url, accessToken, null);
} catch (Exception e2) {
log.warn("KSheet 回退也失败 - {}", e2.getMessage());
}
// 方案3兼容旧版 v7 airsheet若官方恢复
try {
String url = "https://openapi.wps.cn/v7/airsheet/" + fileId + "/sheets/" + sheetIdx + "/cells";
if (range != null && !range.trim().isEmpty()) {
url += "?range=" + java.net.URLEncoder.encode(range, "UTF-8");
}
return WPS365ApiUtil.httpRequest("GET", url, accessToken, null);
} catch (Exception e2) {
throw new RuntimeException("读取AirSheet数据失败: " + e2.getMessage(), e2);
} catch (Exception e3) {
throw new RuntimeException(
"读取智能表格失败AirSheet 与 KSheet 接口均不可用(404)。请确认1) 使用「文件列表」接口返回的 file_token 再试2) 若文档在金山文档(kdocs.cn)创建,需用金山文档开放平台(developer.kdocs.cn)的 KSheet API。原始错误: " + e3.getMessage(),
e3);
}
}
@@ -283,21 +297,32 @@ public class WPS365ApiServiceImpl implements IWPS365ApiService {
requestBody.put("values", valuesArray);
String bodyStr = requestBody.toJSONString();
// 方案1与 KSheet 一致的路径 POST /openapi/airsheet/{fileId}/sheets/{sheetIdx}/cells
// 方案1AirSheet 路径 POST /openapi/airsheet/{fileId}/sheets/{sheetIdx}/cells
try {
String url = baseUrl + "/openapi/airsheet/" + fileId + "/sheets/" + sheetIdx + "/cells";
log.debug("更新AirSheet - url: {}, fileId: {}, sheetIdx: {}, range: {}", url, fileId, sheetIdx, range);
log.debug("更新AirSheet - url: {}, fileId: {}, sheetIdx: {}", url, fileId, sheetIdx);
return WPS365ApiUtil.httpRequest("POST", url, accessToken, bodyStr);
} catch (Exception e) {
log.warn("AirSheet api/v1 写入失败,尝试 v7 - {}", e.getMessage());
log.warn("AirSheet 写入失败,尝试 KSheet 回退 - {}", e.getMessage());
}
// 方案2兼容 v7 PUT /airsheet/{file_id}/worksheets
// 方案2用同一 ID 走 KSheet 写入接口
try {
String url = baseUrl + "/openapi/ksheet/" + fileId + "/sheets/" + sheetIdx + "/cells";
log.debug("回退到 KSheet 写入 - url: {}", url);
return WPS365ApiUtil.httpRequest("POST", url, accessToken, bodyStr);
} catch (Exception e2) {
log.warn("KSheet 回退写入也失败 - {}", e2.getMessage());
}
// 方案3兼容 v7 PUT /airsheet/{file_id}/worksheets
try {
String url = "https://openapi.wps.cn/v7/airsheet/" + fileId + "/worksheets";
return WPS365ApiUtil.httpRequest("PUT", url, accessToken, bodyStr);
} catch (Exception e2) {
throw new RuntimeException("更新AirSheet数据失败: " + e2.getMessage(), e2);
} catch (Exception e3) {
throw new RuntimeException(
"更新智能表格失败AirSheet 与 KSheet 接口均不可用。请使用「文件列表」返回的 file_token 调用 KSheet 写入接口,或确认文档类型。原始错误: " + e3.getMessage(),
e3);
}
}