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

Существует ли ограничение на длину имени рабочего листа Excel?

Когда я пытаюсь установить длинное имя листа с использованием ruby ​​и win32ole со следующим кодом:

require "win32ole"
excel = WIN32OLE.new('Excel.Application')
excel.Visible = 1
puts excel.version
workbook = excel.Workbooks.Add
worksheet1 = workbook.Worksheets.Add
worksheet1.Name = "Pseudopseudohypoparathyroidism" #Length 30, fine
worksheet2 = workbook.Worksheets.Add
worksheet2.Name = "Supercalifragilisticexpialidocious" #Length 34, not fine

Я получаю следующее:

12.0
-:9:in `method_missing': (in setting property `Name': ) (WIN32OLERuntimeError)
    OLE error code:800A03EC in Microsoft Office Excel
      You typed an invalid name for a sheet or chart. Make sure that:

 The name that you type does not exceed 31 characters.
 The name does not contain any of the following characters:  :  \  /  ?  *  [  or  ]
 You did not leave the name blank.
    HRESULT error code:0x80020009
      Exception occurred.
        from -:9:in `<main>'

Версия 12.0 указывает, что я запускаю Excel 2007, но он жалуется, что имя листа слишком длинное. Я просмотрел спецификации и ограничения Excel 2007, как упоминалось в этом связанном ответе, и я не мог найти упоминания о таком лимите. (Попытка переименовать рабочий лист вручную предполагает, что может быть такой предел, однако)

Есть ли предел, и это жесткий лимит или тот, который можно изменить, изменив конфигурацию Excel?

4b9b3361

Ответ 1

Формат файла допускает имена рабочих листов до 255 символов, но если пользовательский интерфейс Excel не хочет, чтобы вы превышали 31 символ, не пытайтесь выйти за пределы 31. Приложение заполнено странными недокументированными ограничениями и причудами и кормлением это файлы, которые находятся в пределах спецификации, но не в пределах диапазона вещей, которые тестирователи тестировали, обычно вызывает ДЕЙСТВИТЕЛЬНОЕ странное поведение. (Пример личного любимого: используя байт-код Excel 4.0 для функции if(), в файле с таблицей строк в стиле Excel 97 отключена кнопка панели инструментов, выделенная полужирным шрифтом в Excel 97.)

Ответ 2

Переименование рабочего листа вручную в Excel, вы нажмете ограничение на 31 символ, поэтому я бы предположил, что это жесткий предел.

Ответ 3

Моим решением было использовать короткий псевдоним (менее 31 символа), а затем записать полное имя в ячейке 0.

Ответ 4

Я использую следующий код vba, где filename - это строка, содержащая имя файла, которое я хочу, и функция RemoveSpecialCharactersAndTruncate определена ниже:

worksheet1.Name = RemoveSpecialCharactersAndTruncate(filename)

'Function to remove special characters from file before saving

Private Function RemoveSpecialCharactersAndTruncate$(ByVal FormattedString$)
    Dim IllegalCharacterSet$
    Dim i As Integer
'Set of illegal characters
    IllegalCharacterSet$ = "*." & Chr(34) & "//\[]:;|=,"
    'Iterate through illegal characters and replace any instances
    For i = 1 To Len(IllegalCharacterSet) - 1
        FormattedString$ = Replace(FormattedString$, Mid(IllegalCharacterSet, i, 1), "")
    Next
    'Return the value capped at 31 characters (Excel limit)
    RemoveSpecialCharactersAndTruncate$ = Left(FormattedString$, _
                           Application.WorksheetFunction.Min(Len(FormattedString), 31))
End Function