在Java中,我们使用以下包以编程方式创建excel文档:
org.apache.poi.hssf
Run Code Online (Sandbox Code Playgroud)
如果您尝试设置工作表的名称(不是文件,而是内部Excel工作表),则在以下情况下会出现错误:
但是,在创建工作表名称为的文档后:
@#$%&()+〜`"':;.,|
没有输出错误,Java中的一切似乎都很好.当您在Office 2003中打开Excel文件时,它将显示一个错误,指出工作表名称无效,并将其重命名为通用的"工作表1".
我不太了解我们之前所说的包,但看起来它没有正确过滤无效的Excel工作表名称.知道如何过滤掉所有已知的无效字符?我只是过滤掉所有非单词字符而犹豫不决.
Bra*_*adC 42
我认为问题是结肠,而不是感叹号.
如果您打开Excel并尝试手动编辑工作表名称,则不允许您键入的唯一字符是[]*/\?:
如果您粘贴其中一个字符,您会收到以下错误:(Excel 2003)
在重命名工作表或图表时,您输入的名称无效.请尝试以下方法之一:
- 确保您输入的名称不超过31个字符.
- 确保名称不包含以下任何字符::\/?*[ 要么 ]
- 确保没有将名称留空.
小智 17
您可以使用Apache POI的WorkbookUtil.createSafeSheetName(String s)安全地创建工作表名称.
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);
}
Run Code Online (Sandbox Code Playgroud)
你可以使用这个:
protected Sheet createSheet(XSSFWorkbook book, String nameSheet) {
return book.createSheet(WorkbookUtil.createSafeSheetName(nameSheet));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33225 次 |
| 最近记录: |