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]