Excel工作表名称的有效字符

时间:2009-01-16 18:26:28

标签: java excel

在Java中,我们使用以下包以编程方式创建excel文档:

org.apache.poi.hssf

如果您尝试设置工作表的名称(不是文件,而是内部Excel工作表),则在以下情况下会出现错误:

  • 名称超过31个字符
  • 该名称包含以下任何字符:/ \ *? []

但是,在创建工作表名称为

的文档后
  

@#$%及()+〜`“':;,|

没有输出错误,Java中的一切似乎都很好。当您在Office 2003中打开Excel文件时,它将显示一个错误,指出工作表名称无效,并将其重命名为通用名称,如“工作表1”。

我对前面提到的我们正在使用的软件包不太了解,但看起来它没有正确过滤无效的Excel工作表名称。知道如何过滤掉所有已知的无效字符?我很想过滤掉所有非单词字符。

4 个答案:

答案 0 :(得分:39)

我认为问题是冒号,而不是感叹号。

如果您打开Excel并尝试手动编辑工作表名称,则不允许您输入的唯一字符是[] * / \? :

如果您粘贴其中一个字符,则会出现以下错误:(Excel 2003)

  

重命名工作表或图表时,您   输入了无效的名称。试试其中之一   以下内容:

     
      
  • 确保您输入的名称不超过31个字符。
  •   
  • 确保名称不包含以下任何内容   字符:: \ /? * [或]
  •   
  • 确保您没有将该名称留空。
  •   

答案 1 :(得分:15)

您可以使用Apache POI的WorkbookUtil.createSafeSheetName(String s)安全地创建工作表名称。

http://poi.apache.org/apidocs/org/apache/poi/ss/util/WorkbookUtil.html

答案 2 :(得分:3)

这是我在C#中使用的(在Java中应该类似):

const string invalidCharsRegex = @"[/\\*'?[\]:]+";
const int maxLength = 31;

string safeName = Regex.Replace(worksheetName, invalidCharsRegex, " ")
                        .Replace("  ", " ")
                        .Trim();

if (string.IsNullOrEmpty(safeName))
{
    safeName = "Default";   // cannot be empty
}
else if (safeName.Length > maxLength)
{
    safeName = safeName.Substring(0, maxLength);
}

答案 3 :(得分:2)

您可以使用:

protected Sheet createSheet(XSSFWorkbook book, String nameSheet) {
    return book.createSheet(WorkbookUtil.createSafeSheetName(nameSheet));
}