IT

Excel 시트 이름에 유효한 문자

itgroup 2023. 4. 23. 10:15
반응형

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

반응형