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); }