This is an automated email from the ASF dual-hosted git repository.

delei pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fesod.git


The following commit(s) were added to refs/heads/main by this push:
     new 9b170914 feat: Introduced Workbook constant for maximum sheet name 
length validation (#658)
9b170914 is described below

commit 9b170914c79954084e2b861ec98cd52995bc920b
Author: DeleiGuo <[email protected]>
AuthorDate: Mon Oct 27 22:41:19 2025 +0800

    feat: Introduced Workbook constant for maximum sheet name length validation 
(#658)
    
    * feat: Introduced Workbook constant for maximum sheet name length 
validation
    
    * test: Added a longer sheet name to the existing sheet name list
    
    * refactor: reorganize import statements in ExcelWriterSheetBuilder
    
    * test: add sheet name length validation test case
---
 .../write/builder/ExcelWriterSheetBuilder.java     | 34 ++++++++++++++++++++--
 .../fesod/excel/writesheet/WriteSheetTest.java     | 15 ++++++++--
 2 files changed, 45 insertions(+), 4 deletions(-)

diff --git 
a/fesod/src/main/java/org/apache/fesod/excel/write/builder/ExcelWriterSheetBuilder.java
 
b/fesod/src/main/java/org/apache/fesod/excel/write/builder/ExcelWriterSheetBuilder.java
index 15dde97c..a6b58012 100644
--- 
a/fesod/src/main/java/org/apache/fesod/excel/write/builder/ExcelWriterSheetBuilder.java
+++ 
b/fesod/src/main/java/org/apache/fesod/excel/write/builder/ExcelWriterSheetBuilder.java
@@ -22,16 +22,19 @@ package org.apache.fesod.excel.write.builder;
 import java.util.Collection;
 import java.util.Objects;
 import java.util.function.Supplier;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.fesod.excel.ExcelWriter;
 import org.apache.fesod.excel.exception.ExcelGenerateException;
 import org.apache.fesod.excel.write.metadata.WriteSheet;
 import org.apache.fesod.excel.write.metadata.fill.FillConfig;
+import org.apache.poi.ss.usermodel.Workbook;
 
 /**
  * Build sheet
  *
  *
  */
+@Slf4j
 public class ExcelWriterSheetBuilder extends 
AbstractExcelWriterParameterBuilder<ExcelWriterSheetBuilder, WriteSheet> {
     private ExcelWriter excelWriter;
     /**
@@ -73,13 +76,13 @@ public class ExcelWriterSheetBuilder extends 
AbstractExcelWriterParameterBuilder
      * @return
      */
     public ExcelWriterSheetBuilder sheetName(String sheetName) {
-        writeSheet.setSheetName(sheetName);
+        writeSheet.setSheetName(sensitiveSheetName(sheetName));
         return this;
     }
 
     public ExcelWriterSheetBuilder sheetNameIfNotNull(String sheetName) {
         if (Objects.nonNull(sheetName)) {
-            writeSheet.setSheetName(sheetName);
+            writeSheet.setSheetName(sensitiveSheetName(sheetName));
         }
         return this;
     }
@@ -136,4 +139,31 @@ public class ExcelWriterSheetBuilder extends 
AbstractExcelWriterParameterBuilder
     protected WriteSheet parameter() {
         return writeSheet;
     }
+
+    /**
+     * Processes worksheet names to ensure they comply with MS Excel's length 
limitations.
+     * <p>
+     * If the provided sheet name exceeds the maximum allowed length defined by
+     * {@link Workbook#MAX_SENSITIVE_SHEET_NAME_LEN}, it will be truncated to 
fit within
+     * the limit. A warning message is logged when truncation occurs, as the 
original
+     * sheet name will not be available in scenarios such as formula 
references.
+     * </p>
+     *
+     * @param sheetName the original worksheet name to process
+     * @return the processed sheet name that complies with Excel's length 
restrictions
+     */
+    private String sensitiveSheetName(String sheetName) {
+        if (sheetName.length() > Workbook.MAX_SENSITIVE_SHEET_NAME_LEN) {
+            String trimmedSheetName = sheetName.substring(0, 
Workbook.MAX_SENSITIVE_SHEET_NAME_LEN);
+
+            // we still need to warn about the trimming as the original sheet 
name won't be available
+            // e.g. when referenced by formulas
+            log.warn(
+                    "Sheet '{}' will be added with a trimmed name '{}' for MS 
Excel compliance.",
+                    sheetName,
+                    trimmedSheetName);
+            return trimmedSheetName;
+        }
+        return sheetName;
+    }
 }
diff --git 
a/fesod/src/test/java/org/apache/fesod/excel/writesheet/WriteSheetTest.java 
b/fesod/src/test/java/org/apache/fesod/excel/writesheet/WriteSheetTest.java
index 98e2d27e..3891f711 100644
--- a/fesod/src/test/java/org/apache/fesod/excel/writesheet/WriteSheetTest.java
+++ b/fesod/src/test/java/org/apache/fesod/excel/writesheet/WriteSheetTest.java
@@ -31,6 +31,7 @@ import org.apache.fesod.excel.FastExcel;
 import org.apache.fesod.excel.support.ExcelTypeEnum;
 import org.apache.fesod.excel.util.TestFileUtil;
 import org.apache.fesod.excel.write.metadata.WriteSheet;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
@@ -106,8 +107,8 @@ public class WriteSheetTest {
     }
 
     private void testSheetOrderWithSheetName(ExcelTypeEnum excelTypeEnum) {
-        List<String> sheetNameList = Arrays.asList("Sheet1", "Sheet2", 
"Sheet3");
-        List<Integer> sheetNoList = Arrays.asList(0, 1, 2);
+        List<String> sheetNameList = Arrays.asList("Sheet1", "Sheet2", 
"Sheet3", "Sheet111112222233333444445555566666");
+        List<Integer> sheetNoList = Arrays.asList(0, 1, 2, 3);
 
         Map<Integer, Integer> dataMap = initSheetDataSizeList(sheetNoList);
         File testFile = 
TestFileUtil.createNewFile("writesheet/write-sheet-order-name" + 
excelTypeEnum.getValue());
@@ -136,6 +137,16 @@ public class WriteSheetTest {
             excelWriter.write(dataList(dataMap.get(sheetNo)), writeSheet);
             Assertions.assertEquals(
                     sheetNo, 
excelWriter.writeContext().writeSheetHolder().getSheetNo());
+
+            sheetNo = 3;
+            writeSheet =
+                    FastExcel.writerSheet(sheetNo, 
sheetNameList.get(sheetNo)).build();
+            excelWriter.write(dataList(dataMap.get(sheetNo)), writeSheet);
+            Assertions.assertEquals(
+                    sheetNameList.get(sheetNo).substring(0, 
Workbook.MAX_SENSITIVE_SHEET_NAME_LEN),
+                    
excelWriter.writeContext().writeSheetHolder().getSheetName());
+            Assertions.assertEquals(
+                    sheetNo, 
excelWriter.writeContext().writeSheetHolder().getSheetNo());
         }
 
         for (int i = 0; i < sheetNoList.size(); i++) {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to