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


71

当我尝试通过以下代码使用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的配置来更改的限制?

Answers:


110

该文件格式最多可以包含255个字符的工作表名称,但是如果Excel UI不想超过31个字符,请不要尝试超过31个字符。应用程序充满了奇怪的未记录限制和怪癖,并向其提供了文件不在规格范围内,但不在测试人员可以测试的范围之内,通常会导致非常奇怪的行为。(个人最喜欢的示例:在具有Excel 97样式字符串表的文件中,对if()函数使用Excel 4.0字节码,在Excel 97中禁用工具栏按钮为粗体。)


53
该31个字符的限制不能接受
Skippy Fastol 2012年

1
严重的错误!想要一个交换?;-)
Arioch'The

3
此外,OpenXML API允许您将任意长度的字符串分配给工作表标签,与此同时,如果该字符串比UI驱动的限制更长,则Excel会抱怨文件损坏。因此,对于任何人来说,31个字符应该足够了。
Yury Schkatula 2014年

注意:Excel工作表名称不能包含引号(在处理仅使用大写字母的字符串时,经常使用我的语言)
realtebo 2015年

立即进入它...想要更改a的名称ComboBox。一切正常,直到我重新启动Excel。然后,该名称突然被重置为其原始状态(“ ComboBox1”)。
jAC 2016年

8

在Excel中手动重命名工作表,您遇到了31个字符的限制,因此我建议这是一个硬限制。


2

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


4
这不是一个真正的答案,最好作为评论。
克里夫·里鲍多

3
好吧,没有解决方案。因此,解决此问题是我们最接近解决方案的事情。您还可以对没有提供解决方案或建议的其他2条评论说。
nikon0iT

2

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

1

我刚刚在Windows 7上使用Excel 2013测试了几个路径。我发现总体路径名限制为213,基本名长度为186。至少清除了超过基本名长度的错误对话框是很清楚的: 基本名称错误

尝试将不太长的基本名称移动到太长的路径名称也很清楚:在此处输入图片说明

但是,路径名错误是欺骗性的。毫无帮助:在此处输入图片说明

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.