1
This commit is contained in:
@@ -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.cn 下 airsheet 接口目前均返回 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=...
|
||||
// 方案1:AirSheet 路径 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
|
||||
// 方案1:AirSheet 路径 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user