Существует ли ограничение на длину имени листа 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?

5 59

5 ответов:

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

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

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

Я использую следующий код 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

Я только что протестировал пару путей с помощью Excel 2013 на Windows 7. Я обнаружил, что общий предел пути составляет 213, а длина базового имени-186. По крайней мере, диалоговое окно ошибки для превышения длины базового имени ясно: basename error

и попытка переместить не слишком длинное базовое имя в слишком длинный путь также очень ясна:enter image description here

ошибка пути обманчива, хотя. Совершенно бесполезно:enter image description here

это ленивый Microsoft ограничение. Там нет веской причины для этих произвольных ограничений длины, но в конце концов, это реальная ошибка в диалоговом окне ошибки.