From 14acba49de388c5850093b8a9ab45d7c14c84c8f Mon Sep 17 00:00:00 2001 From: labkey-danield Date: Mon, 6 Oct 2025 11:28:56 -0700 Subject: [PATCH 1/3] Added EscapeUtil.escapeForExcelSheetName. Call EscapeUtil.escapeForExcelSheetName in SMProSamplesCrossFolderCRUDTest.testUniqueSheetNamesForLongTypeNames --- src/org/labkey/test/util/EscapeUtil.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/org/labkey/test/util/EscapeUtil.java b/src/org/labkey/test/util/EscapeUtil.java index d7ba420263..76c2f7b6b3 100644 --- a/src/org/labkey/test/util/EscapeUtil.java +++ b/src/org/labkey/test/util/EscapeUtil.java @@ -212,9 +212,15 @@ public static String getMarkupEscapedValue(String value) } private static final Pattern nameExpressionNeedsEscaping = Pattern.compile("([\\\\$/&}~,.])"); - public static String escapeForNameExpression(String name) + public static String escapeForNameExpression(String value) { - return nameExpressionNeedsEscaping.matcher(name).replaceAll("\\\\$1"); + return nameExpressionNeedsEscaping.matcher(value).replaceAll("\\\\$1"); + } + + private static final Pattern excelPageNeedsEscaping = Pattern.compile("([:/])"); + public static String escapeForExcelSheetName(String value) + { + return excelPageNeedsEscaping.matcher(value).replaceAll("_"); } /** From 1e387d9018743136900b64b657734633eb7e05f9 Mon Sep 17 00:00:00 2001 From: labkey-danield Date: Mon, 6 Oct 2025 12:06:07 -0700 Subject: [PATCH 2/3] Add comment. --- src/org/labkey/test/util/EscapeUtil.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/org/labkey/test/util/EscapeUtil.java b/src/org/labkey/test/util/EscapeUtil.java index 76c2f7b6b3..8f0c7ceaec 100644 --- a/src/org/labkey/test/util/EscapeUtil.java +++ b/src/org/labkey/test/util/EscapeUtil.java @@ -218,6 +218,13 @@ public static String escapeForNameExpression(String value) } private static final Pattern excelPageNeedsEscaping = Pattern.compile("([:/])"); + /** + * Escapes invalid characters in a string to ensure it can be used as a valid Excel sheet name. + * Replaces characters matching the {@code excelPageNeedsEscaping} pattern with an underscore ("_"). + * + * @param value the input string to be escaped + * @return the escaped string that can safely be used as an Excel sheet name + */ public static String escapeForExcelSheetName(String value) { return excelPageNeedsEscaping.matcher(value).replaceAll("_"); From dc5cef651ce69968bc1f24dfdd3640985780676e Mon Sep 17 00:00:00 2001 From: labkey-danield Date: Mon, 6 Oct 2025 15:00:10 -0700 Subject: [PATCH 3/3] Use WorkbookUtil.createSafeSheetName(value, '_'); to create the valid sheet name. --- src/org/labkey/test/util/EscapeUtil.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/org/labkey/test/util/EscapeUtil.java b/src/org/labkey/test/util/EscapeUtil.java index 8f0c7ceaec..643dfb2f76 100644 --- a/src/org/labkey/test/util/EscapeUtil.java +++ b/src/org/labkey/test/util/EscapeUtil.java @@ -16,6 +16,7 @@ package org.labkey.test.util; import org.apache.commons.text.StringEscapeUtils; +import org.apache.poi.ss.util.WorkbookUtil; import org.eclipse.jetty.util.URIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -227,7 +228,7 @@ public static String escapeForNameExpression(String value) */ public static String escapeForExcelSheetName(String value) { - return excelPageNeedsEscaping.matcher(value).replaceAll("_"); + return WorkbookUtil.createSafeSheetName(value, '_'); } /**