Excel工作表名称的有效字符

在Java中,我们使用下面的包以编程方式创buildExcel文档:

org.apache.poi.hssf 

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

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

但是,创build表单名称为:

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

没有错误输出,并在Java中的一切似乎罚款。 当您在Office 2003中打开Excel文件时,会出现一个错误信息,表明表名称无效,并将其重命名为“Sheet 1”。

我对前面提到的软件包不太了解,但是看起来没有正确过滤无效的Excel表格名称。 任何想法如何我可以过滤出所有已知的无效字符? 我不愿意简单地过滤掉所有非单词字符。

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

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

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

重命名工作表或图表时,您input的名称无效。 尝试以下方法之一:

  • 确保您input的名称不超过31个字符。
  • 确保名称不包含以下任何字符::\ /? * [ 要么 ]
  • 确保你没有留下空白的名字。

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

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

这是我在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); }