aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache/poi/ss/util/WorkbookUtil.java
diff options
context:
space:
mode:
authorYegor Kozlov <yegor@apache.org>2012-02-27 15:29:26 +0000
committerYegor Kozlov <yegor@apache.org>2012-02-27 15:29:26 +0000
commit95b56c8f7caa1ed8bee1a96d67bf3a4d5471ecb3 (patch)
tree73c3f1e069d79e6bcca96af55a3505f179064a3c /src/java/org/apache/poi/ss/util/WorkbookUtil.java
parentf3d9f2bdd9469742f8a90eb55dece945830af0bd (diff)
downloadpoi-95b56c8f7caa1ed8bee1a96d67bf3a4d5471ecb3.tar.gz
poi-95b56c8f7caa1ed8bee1a96d67bf3a4d5471ecb3.zip
follow-on to r1294180
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1294186 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache/poi/ss/util/WorkbookUtil.java')
-rw-r--r--src/java/org/apache/poi/ss/util/WorkbookUtil.java85
1 files changed, 54 insertions, 31 deletions
diff --git a/src/java/org/apache/poi/ss/util/WorkbookUtil.java b/src/java/org/apache/poi/ss/util/WorkbookUtil.java
index 8008844b8a..71ad99e691 100644
--- a/src/java/org/apache/poi/ss/util/WorkbookUtil.java
+++ b/src/java/org/apache/poi/ss/util/WorkbookUtil.java
@@ -45,40 +45,63 @@ public class WorkbookUtil {
* @return a valid string, "empty" if to short, "null" if null
*/
public final static String createSafeSheetName(final String nameProposal) {
- if (nameProposal == null) {
- return "null";
- }
- if (nameProposal.length() < 1) {
- return "empty";
- }
- final int length = Math.min(31, nameProposal.length());
- final String shortenname = nameProposal.substring(0, length);
- final StringBuilder result = new StringBuilder(shortenname);
- for (int i=0; i<length; i++) {
- char ch = result.charAt(i);
- switch (ch) {
+ return createSafeSheetName(nameProposal, ' ');
+ }
+
+ /**
+ * Creates a valid sheet name, which is conform to the rules.
+ * In any case, the result safely can be used for
+ * {@link org.apache.poi.ss.usermodel.Workbook#setSheetName(int, String)}.
+ * <br>
+ * Rules:
+ * <ul>
+ * <li>never null</li>
+ * <li>minimum length is 1</li>
+ * <li>maximum length is 31</li>
+ * <li>doesn't contain special chars: : 0x0000, 0x0003, / \ ? * ] [ </li>
+ * <li>Sheet names must not begin or end with ' (apostrophe)</li>
+ * </ul>
+ *
+ * @param nameProposal can be any string, will be truncated if necessary,
+ * allowed to be null
+ * @param replaceChar the char to replace invalid characters.
+ * @return a valid string, "empty" if to short, "null" if null
+ */
+ public final static String createSafeSheetName(final String nameProposal, char replaceChar) {
+ if (nameProposal == null) {
+ return "null";
+ }
+ if (nameProposal.length() < 1) {
+ return "empty";
+ }
+ final int length = Math.min(31, nameProposal.length());
+ final String shortenname = nameProposal.substring(0, length);
+ final StringBuilder result = new StringBuilder(shortenname);
+ for (int i=0; i<length; i++) {
+ char ch = result.charAt(i);
+ switch (ch) {
case '\u0000':
case '\u0003':
case ':':
- case '/':
- case '\\':
- case '?':
- case '*':
- case ']':
- case '[':
- result.setCharAt(i, ' ');
- break;
- case '\'':
- if (i==0 || i==length-1) {
- result.setCharAt(i, ' ');
- }
- break;
- default:
- // all other chars OK
- }
- }
- return result.toString();
- }
+ case '/':
+ case '\\':
+ case '?':
+ case '*':
+ case ']':
+ case '[':
+ result.setCharAt(i, replaceChar);
+ break;
+ case '\'':
+ if (i==0 || i==length-1) {
+ result.setCharAt(i, replaceChar);
+ }
+ break;
+ default:
+ // all other chars OK
+ }
+ }
+ return result.toString();
+ }
/**
* Validates sheet name.