diff --git a/src/main/java/cn/isliu/FsHelper.java b/src/main/java/cn/isliu/FsHelper.java index dd86664..a2146ef 100644 --- a/src/main/java/cn/isliu/FsHelper.java +++ b/src/main/java/cn/isliu/FsHelper.java @@ -260,7 +260,12 @@ public class FsHelper { FeishuClient client = FsClient.getInstance().getClient(); Sheet sheet = FsApiUtil.getSheetMetadata(sheetId, client, spreadsheetToken); List fsTableDataList = FsTableUtil.getFsTableData(sheet, spreadsheetToken, tableConf, fieldsMap); - Map currTableRowMap = fsTableDataList.stream().collect(Collectors.toMap(FsTableData::getUniqueId, FsTableData::getRow)); + + Map currTableRowMap = fsTableDataList.stream() + .collect(Collectors.toMap( + FsTableData::getUniqueId, + FsTableData::getRow, + (existing, replacement) -> existing)); final Integer[] row = {tableConf.headLine()}; fsTableDataList.forEach(fsTableData -> { @@ -345,7 +350,7 @@ public class FsHelper { int rowTotal = sheet.getGridProperties().getRowCount(); int rowNum = rowCount.get(); if (rowNum >= rowTotal) { - FsApiUtil.addRowColumns(sheetId, spreadsheetToken, "ROWS", rowTotal - rowNum, client); + FsApiUtil.addRowColumns(sheetId, spreadsheetToken, "ROWS", Math.abs(rowTotal - rowNum), client); } Object resp = FsApiUtil.batchPutValues(sheetId, spreadsheetToken, resultValuesBuilder.build(), client); diff --git a/src/main/java/cn/isliu/core/builder/MapWriteBuilder.java b/src/main/java/cn/isliu/core/builder/MapWriteBuilder.java index adeaf50..6dfbea7 100644 --- a/src/main/java/cn/isliu/core/builder/MapWriteBuilder.java +++ b/src/main/java/cn/isliu/core/builder/MapWriteBuilder.java @@ -345,7 +345,7 @@ public class MapWriteBuilder { private void ensureSufficientRows(Sheet sheet, int requiredRows, FeishuClient client) { int rowTotal = sheet.getGridProperties().getRowCount(); if (requiredRows >= rowTotal) { - FsApiUtil.addRowColumns(sheetId, spreadsheetToken, "ROWS", requiredRows - rowTotal, client); + FsApiUtil.addRowColumns(sheetId, spreadsheetToken, "ROWS", Math.abs(requiredRows - rowTotal), client); } } diff --git a/src/main/java/cn/isliu/core/builder/WriteBuilder.java b/src/main/java/cn/isliu/core/builder/WriteBuilder.java index a2fe033..f258fbf 100644 --- a/src/main/java/cn/isliu/core/builder/WriteBuilder.java +++ b/src/main/java/cn/isliu/core/builder/WriteBuilder.java @@ -163,7 +163,10 @@ public class WriteBuilder { Map currTableRowMap = fsTableDataList.stream() .filter(fsTableData -> fsTableData.getRow() >= tableConf.headLine()) - .collect(Collectors.toMap(FsTableData::getUniqueId, FsTableData::getRow)); + .collect(Collectors.toMap( + FsTableData::getUniqueId, + FsTableData::getRow, + (existing, replacement) -> existing)); final Integer[] row = {tableConf.headLine()}; fsTableDataList.forEach(fsTableData -> { @@ -246,7 +249,7 @@ public class WriteBuilder { int rowTotal = sheet.getGridProperties().getRowCount(); int rowNum = rowCount.get(); if (rowNum >= rowTotal) { - FsApiUtil.addRowColumns(sheetId, spreadsheetToken, "ROWS", rowTotal - rowNum, client); + FsApiUtil.addRowColumns(sheetId, spreadsheetToken, "ROWS", Math.abs(rowTotal - rowNum), client); } fileDataList.forEach(fileData -> { diff --git a/src/main/java/cn/isliu/core/utils/FsTableUtil.java b/src/main/java/cn/isliu/core/utils/FsTableUtil.java index 876f3d0..23a1ec9 100644 --- a/src/main/java/cn/isliu/core/utils/FsTableUtil.java +++ b/src/main/java/cn/isliu/core/utils/FsTableUtil.java @@ -186,7 +186,7 @@ public class FsTableUtil { List> values = new LinkedList<>(); for (int i = 0; i < batchCount; i++) { int startRowIndex = startOffset + i * rowCount; - int endRowIndex = Math.max(startRowIndex + rowCount - 1, totalRow - 1); + int endRowIndex = Math.min(startRowIndex + rowCount - 1, totalRow - 1); // 3. 获取工作表数据 ValuesBatch valuesBatch = FsApiUtil.getSheetData(sheet.getSheetId(), spreadsheetToken, @@ -498,6 +498,9 @@ public class FsTableUtil { public static void setTableOptions(String spreadsheetToken, List headers, Map fieldsMap, String sheetId, boolean enableDesc, Map customProperties) { + // 读取sheet数据,查询有现有行数(超出会报错) + Sheet sheet = FsApiUtil.getSheetMetadata(sheetId, FsClient.getInstance().getClient(), spreadsheetToken); + int rowCount = sheet.getGridProperties().getRowCount(); List list = Arrays.asList(headers.toArray()); int line = getMaxLevel(fieldsMap) + (enableDesc ? 2 : 1); @@ -534,8 +537,9 @@ public class FsTableUtil { } if (result != null && !result.isEmpty()) { - FsApiUtil.setOptions(sheetId, FsClient.getInstance().getClient(), spreadsheetToken, tableProperty.type() == TypeEnum.MULTI_SELECT, position + line, position + 200, - result); + FsApiUtil.setOptions(sheetId, FsClient.getInstance().getClient(), spreadsheetToken, + tableProperty.type() == TypeEnum.MULTI_SELECT, + position + line, position + rowCount, result); } } }