Подтвердить что ты не робот

Действительные символы для имен листов Excel

В Java мы используем следующий пакет для программного создания документов excel:

org.apache.poi.hssf

Если вы попытаетесь установить имя листа (не файл, а внутренний лист Excel), вы получите сообщение об ошибке, если:

  • Имя более 31 символа
  • Имя содержит любой из следующих символов:/\ *? []

Однако после создания документа с именем листа:

@# $% &() + ~ `" ':;., |

Ошибка не выводится, и все кажется прекрасным в Java. Когда вы открываете файл excel в Office 2003, он даст вам сообщение о том, что имя листа недействительно и что оно переименовано в нечто общее, например "Лист 1".

Я не знаю много о ранее заявленном пакете, который мы используем, но похоже, что он неправильно фильтрует неверные имена листов Excel. Любая идея, как я могу отфильтровать все известные недопустимые символы? Я не решаюсь просто отфильтровать все символы, отличные от слов.

4b9b3361

Ответ 1

Я думаю, что проблема - это двоеточие, а не восклицательный знак.

Если вы открываете Excel и пытаетесь вручную изменить имя листа, единственными символами, которые он не позволяет вам вводить, являются [] */\?

Если вы вставляете один из этих символов, вы получаете следующую ошибку: (Excel 2003)

При переименовании листа или диаграммы вы введите недопустимое имя. Попробуйте один из следующее:

  • Убедитесь, что введенное имя не превышает 31 символа.
  • Убедитесь, что имя не содержит ни одного из следующих персонажи:: \/? * [или]
  • Убедитесь, что вы не оставили имя пустым.

Ответ 3

Это то, что я использую в С# (должно быть похоже на 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);
}