Excel工作表的名称长度是否有限制?

时间:2010-09-10 02:05:35

标签: 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 specifications and limits中提到的this related answer,我发现它没有提到任何这样的限制。 (尝试手动重命名工作表表明可能存在这样的限制)

是否有限制,是硬限制还是可以通过更改Excel配置来更改?

5 个答案:

答案 0 :(得分:97)

文件格式允许最多255个字符的工作表名称,但如果Excel UI不要求超过31个字符,请不要尝试超过31个。应用程序充满了奇怪的无证限制和怪癖,以及它在规范内但不在测试人员测试过的范围内的文件通常会导致非常奇怪的行为。 (个人最喜欢的例子:使用Excel 4.0字节码作为if()函数,在具有Excel 97样式字符串表的文件中,禁用Excel 97中粗体的工具栏按钮。)

答案 1 :(得分:7)

在Excel中手动重命名工作表,你达到了31个字符的限制,所以我建议这是一个硬限制。

答案 2 :(得分:1)

我的解决方案是使用一个简短的昵称(少于31个字符),然后在单元格0中写下整个名称。

答案 3 :(得分:1)

我使用以下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

答案 4 :(得分:0)

我刚刚在Windows 7上使用Excel 2013测试了几条路径。我发现整体路径名限制为213,基本名称长度为186.至少超出基本名称长度的错误对话框是明确的:{{0} }

尝试将一个不太长的基本名称移动到一个太长的路径名也非常明确:basename error

但路径名错误具有欺骗性。非常无益:enter image description here

这是一个懒惰的微软限制。这些任意长度限制没有充分的理由,但最后,它是错误对话框中的一个真正的错误。