Quellcode durchsuchen

feat:
新增初版 自动排床

18339543638 vor 2 Jahren
Ursprung
Commit
fbe78e39de

+ 22 - 19
tr-modules/tr-module-export/src/main/java/cn/tr/module/excel/core/handler/write/CustomRowWriteHandler.java

@@ -140,10 +140,8 @@ public class CustomRowWriteHandler implements RowWriteHandler {
             firstTime = false;
         }
 
-
-
-        // 第一级设置DataValidation
         DataValidationHelper dvHelper = sheet.getDataValidationHelper();
+        // 第一级设置DataValidation
         DataValidationConstraint firstConstraint = dvHelper.createExplicitListConstraint(new ArrayList<String>(cascadeSelectSource.keySet()).toArray(new String[CollectionUtil.size(cascadeSelectSource)]));
         CellRangeAddressList firstRangeAddressList = new CellRangeAddressList(1, ExcelConstant.MAX_ROW, cascadeParentIndex , cascadeParentIndex );
         DataValidation firstDataValidation = dvHelper.createValidation(firstConstraint, firstRangeAddressList);
@@ -169,7 +167,7 @@ public class CustomRowWriteHandler implements RowWriteHandler {
     }
 
     private String buildRange(int offset, int startRow, int rowCount) {
-        String start = Hex26.toHex26(startRow);
+        String start = Hex26.toHex26(offset+1);
         return "$" + start + "$" + startRow + ":$" + start + "$" + (startRow + rowCount - 1);
     }
 
@@ -262,25 +260,30 @@ public class CustomRowWriteHandler implements RowWriteHandler {
 
     static class Hex26 {
         // 进制基础值,也可以修改为'a'
-        private final static char A = 'A';
-
+        private final static char A = 'A'-1;
 
         public static String toHex26(int i) {
-            StringBuilder sb = new StringBuilder();
-            if (i == 0) {
-                sb.append(A);
-                return sb.toString();
-            }
-            int divide = i / 26;
-            if (divide > 0) {
-                for (int j = 0; j < divide; j++) {
-                    sb.append(A);
+            String result="";
+            while (i>=26){
+                if(i==26){
+                    result=result+'Z';
+                    i=-1;
+                    break;
+                }
+                int next=i/27;
+                int remain=i%26;
+                if(remain==0){
+                    result=result+'Z';
+                }else {
+                    result=result+(char)(A+remain);
                 }
+
+                i=next;
+            }
+            if(i!=-1){
+                result=result+(char)(A+i);
             }
-            int m = i % 26;
-            char c = (char) (A + m);
-            sb.append(c);
-            return sb.toString();
+            return StrUtil.reverse(result);
         }
     }