|
@@ -33,9 +33,12 @@ import org.apache.poi.ss.usermodel.*;
|
|
|
import org.apache.poi.ss.util.CellRangeAddress;
|
|
|
import org.apache.poi.util.IOUtils;
|
|
|
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
|
|
|
+import org.apache.poi.xssf.usermodel.XSSFSheet;
|
|
|
import org.jsoup.Jsoup;
|
|
|
import org.jsoup.nodes.Element;
|
|
|
import org.jsoup.select.Elements;
|
|
|
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTMergeCell;
|
|
|
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTMergeCells;
|
|
|
import org.springblade.business.entity.*;
|
|
|
import org.springblade.business.feign.TaskClient;
|
|
|
import org.springblade.common.constant.ClientIdConstant;
|
|
@@ -97,6 +100,7 @@ import java.util.*;
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
import java.util.concurrent.ExecutionException;
|
|
|
import java.util.function.Function;
|
|
|
+import java.util.regex.Matcher;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
import static org.bouncycastle.asn1.x500.style.RFC4519Style.o;
|
|
@@ -3290,6 +3294,9 @@ public class TaskController extends BladeController {
|
|
|
reportResults.removeIf(rs -> !fileUrlMapping.containsKey(rs.getExcelId().toString()));
|
|
|
|
|
|
reportResults.forEach(rs -> {
|
|
|
+ if(rs.getInitTableName().equals("m_20240325154016_1772166597482381312")){
|
|
|
+ rs.setDeleteRow("13,15");
|
|
|
+ }
|
|
|
|
|
|
rs.pathInit(file_path,report.getContractId());
|
|
|
rs.setExcelUrl(fileUrlMapping.get(rs.getExcelId().toString()));
|
|
@@ -3378,6 +3385,14 @@ public class TaskController extends BladeController {
|
|
|
sheet.addMergedRegionUnsafe(ca);
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
+ String deleteRow=rs.getDeleteRow();
|
|
|
+ if(deleteRow!=null&&!deleteRow.isEmpty()){
|
|
|
+ LinkedList<Integer> rowIds= Arrays.stream(deleteRow.split("\\D+")).map(Integer::parseInt).collect(Collectors.toCollection(LinkedList::new));
|
|
|
+ if(rowIds.size()>=2) {
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
sheet.setPrintGridlines(false);
|
|
|
|
|
@@ -3444,7 +3459,140 @@ public class TaskController extends BladeController {
|
|
|
return R.data(fileUrl);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ public void deleteRows(Sheet sheet, int startRow, int endRow) {
|
|
|
+ for (int i = startRow; i <= endRow; i++) {
|
|
|
+ int lastRowNum = sheet.getLastRowNum();
|
|
|
+ if (i >= 0 && i < lastRowNum) {
|
|
|
+ sheet.shiftRows(i + 1, lastRowNum, -1);
|
|
|
+ }
|
|
|
+ if (i == lastRowNum) {
|
|
|
+ Row removingRow = sheet.getRow(i);
|
|
|
+ if (removingRow != null) {
|
|
|
+ sheet.removeRow(removingRow);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public static void deleteMergedRegions(Sheet sheet, int rowIndex) {
|
|
|
+ if (sheet instanceof XSSFSheet) {
|
|
|
+ XSSFSheet xssfSheet = (XSSFSheet) sheet;
|
|
|
+ CTMergeCells ctMergeCells = xssfSheet.getCTWorksheet().getMergeCells();
|
|
|
+
|
|
|
+ if (ctMergeCells != null) {
|
|
|
+ for (int i = ctMergeCells.sizeOfMergeCellArray() - 1; i >= 0; i--) {
|
|
|
+ CTMergeCell ctMergeCell = ctMergeCells.getMergeCellArray(i);
|
|
|
+ CellRangeAddress cellRangeAddress = CellRangeAddress.valueOf(ctMergeCell.getRef());
|
|
|
+
|
|
|
+ if (cellRangeAddress.getFirstRow() <= rowIndex && cellRangeAddress.getLastRow() >= rowIndex) {
|
|
|
+ ctMergeCells.removeMergeCell(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public void deleteRows2(Sheet sheet, int startRow, int endRow) {
|
|
|
+ int lastRowNum = sheet.getLastRowNum();
|
|
|
+ deleteMergedRegions(sheet, Objects.requireNonNull(getMergedRegions(sheet, coords2Int("A" + (startRow+1) + "~" + "R" + (endRow+1)))));
|
|
|
+ for (int i = endRow; i >= startRow; i--) {
|
|
|
+ deleteMergedRegions(sheet,i);
|
|
|
+ Row row = sheet.getRow(i);
|
|
|
+ if (row != null) {
|
|
|
+ sheet.removeRow(row);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ sheet.shiftRows(endRow + 1, lastRowNum, -3);
|
|
|
+ System.out.println();
|
|
|
+ }
|
|
|
+ public static void deleteMergedRegions(Sheet sheet, List<CellRangeAddress> regionsToDelete) {
|
|
|
+ for (CellRangeAddress region : regionsToDelete) {
|
|
|
+
|
|
|
+ for (int i = sheet.getNumMergedRegions() - 1; i >= 0; i--) {
|
|
|
+ CellRangeAddress mergedRegion = sheet.getMergedRegion(i);
|
|
|
+ if (mergedRegion.formatAsString().equals(region.formatAsString())) {
|
|
|
+ sheet.removeMergedRegion(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public static List<CellRangeAddress> getMergedRegions(Sheet sheet, String coords) {
|
|
|
+ List<CellRangeAddress> result = new ArrayList<>();
|
|
|
+ if(sheet.getMergedRegions()!=null&&StringUtils.isNotEmpty(coords)){
|
|
|
+ for(CellRangeAddress ca:sheet.getMergedRegions()){
|
|
|
+ int firstColumn = ca.getFirstColumn();
|
|
|
+ int lastColumn = ca.getLastColumn();
|
|
|
+ int firstRow = ca.getFirstRow();
|
|
|
+ int lastRow = ca.getLastRow();
|
|
|
+ Matcher mu = BaseUtils.matcher("(\\d{1,3}),(\\d{1,3}),(\\d{1,3}),(\\d{1,3})",coords);
|
|
|
+
|
|
|
+ List<Integer[]> corners = Arrays.asList(new Integer[]{firstColumn,firstRow},new Integer[]{lastColumn,firstRow},new Integer[]{firstColumn,lastRow},new Integer[]{lastColumn,lastRow});
|
|
|
+ if(mu.find()){
|
|
|
+ int firstColumn2 = BaseUtils.handleObj2Integer(mu.group(1));
|
|
|
+ int lastColumn2 = BaseUtils.handleObj2Integer(mu.group(3));
|
|
|
+ int firstRow2 = BaseUtils.handleObj2Integer(mu.group(2));
|
|
|
+ int lastRow2 = BaseUtils.handleObj2Integer(mu.group(4));
|
|
|
+ for(Integer[] corner:corners){
|
|
|
+ if(firstColumn2<=corner[0]&&corner[0]<=lastColumn2&&firstRow2<=corner[1]&&corner[1]<=lastRow2){
|
|
|
+ result.add(ca);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(Func.isNotEmpty(result)){
|
|
|
+ result=result.stream().distinct().collect(Collectors.toList());
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String coords2Int(String coords){
|
|
|
+ Matcher mx =BaseUtils.matcher("([A-Z]{1,3})(\\d{1,3})[~|\\-|,|#]([A-Z]{1,3})(\\d{1,3})",coords);
|
|
|
+ if(mx.find()) {
|
|
|
+ return coords4Ints(mx);
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ public static String coords4Ints(Matcher mx){
|
|
|
+ List<Integer> l = new ArrayList<>();
|
|
|
+ for (int i = 1; i <= mx.groupCount(); i++) {
|
|
|
+ if (i % 2 == 0) {
|
|
|
+ l.add(BaseUtils.handleObj2Integer(mx.group(i)) - 1);
|
|
|
+ } else {
|
|
|
+ l.add(BaseUtils.parseColumn(mx.group(i)));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return l.get(0)+","+l.get(1)+","+l.get(2)+","+l.get(3);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void deleteRows3(Sheet sheet, int startRow, int endRow) {
|
|
|
+
|
|
|
+ for (int i = sheet.getNumMergedRegions() - 1; i >= 0; i--) {
|
|
|
+ CellRangeAddress mergedRegion = sheet.getMergedRegion(i);
|
|
|
+ if ((mergedRegion.getFirstRow() >= startRow && mergedRegion.getFirstRow() <= endRow) ||
|
|
|
+ (mergedRegion.getLastRow() >= startRow && mergedRegion.getLastRow() <= endRow)) {
|
|
|
+
|
|
|
+ sheet.removeMergedRegion(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ int lastRowNum = sheet.getLastRowNum();
|
|
|
+ if (endRow < lastRowNum) {
|
|
|
+ sheet.shiftRows(endRow + 1, lastRowNum, -(endRow - startRow + 1));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ for (int i = lastRowNum; i > lastRowNum - (endRow - startRow + 1); i--) {
|
|
|
+ Row removingRow = sheet.getRow(i);
|
|
|
+ if (removingRow != null) {
|
|
|
+ sheet.removeRow(removingRow);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
private void mergeCells(Sheet sheet, List<ReportMergeCellsConfig> configList){
|
|
|
if(configList.size()>0){
|
|
|
configList.forEach(c->{
|