Excel 시트 이름에 유효한 문자
Java에서는 다음 패키지를 사용하여 프로그래밍 방식으로 Excel 문서를 만듭니다.
org.apache.poi.hssf
시트 이름(NOT 파일, 내부 Excel 시트)을 설정하려고 하면 다음과 같은 오류가 발생합니다.
- 이름이 31자를 넘습니다.
- 이름에는 다음 문자 중 하나가 포함됩니다. / \ * ? [ ]
그러나 시트 이름이 다음과 같은 문서를 작성한 후:
@#$%&()+~':;...|
에러는 출력되지 않고, Java에서는 모든 것이 정상인 것 같습니다.Office 2003에서 Excel 파일을 열면 시트 이름이 잘못되어 "Sheet 1"과 같은 일반적인 이름으로 이름이 변경되었음을 나타내는 오류가 나타납니다.
이전에 사용하고 있는 패키지에 대해서는 잘 모릅니다만, 잘못된 Excel 시트명을 필터링 할 수 없는 것 같습니다.잘못된 문자를 걸러낼 방법이 없을까요?단순히 모든 비단어 문자를 걸러내는 것이 망설여집니다.
내 생각에 문제는 느낌표가 아니라 대장인 것 같아요.
Excel을 열고 시트 이름을 수동으로 편집하려고 하면 입력할 수 없는 유일한 문자는 [ ] * / \ ? : 입니다.
이러한 문자 중 하나를 붙여넣으면 다음 오류가 발생합니다(Excel 2003).
시트 또는 차트의 이름을 변경하는 동안 잘못된 이름을 입력했습니다.다음 중 하나를 시도합니다.
- 입력한 이름이 31자를 넘지 않도록 하십시오.
- 이름에 다음 문자가 포함되어 있지 않은지 확인합니다. : \ / ? * [ or ]
- 이름을 공백으로 두지 마십시오.
Apache POI의 WorkbookUtil.createSafe를 사용할 수 있습니다.시트명을 안전하게 작성하려면 , 시트명(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);
}
다음을 사용할 수 있습니다.
protected Sheet createSheet(XSSFWorkbook book, String nameSheet) {
return book.createSheet(WorkbookUtil.createSafeSheetName(nameSheet));
}
언급URL : https://stackoverflow.com/questions/451452/valid-characters-for-excel-sheet-names
'IT' 카테고리의 다른 글
T-SQL에 해당하는 분할 함수? (0) | 2023.04.23 |
---|---|
두 데이터베이스 간의 외부 키 관계 추가 (0) | 2023.04.23 |
쿼리 문자열 없이 URL 가져오기 (0) | 2023.04.23 |
자동 레이아웃 - UIButton의 고유 크기에는 제목 삽입이 포함되지 않습니다. (0) | 2023.04.18 |
그립을 통해서만 크기를 조정할 수 있는 테두리 없이 WPF 창을 만드는 방법은 무엇입니까? (0) | 2023.04.18 |