【问题标题】:Is there a limit on an Excel worksheet's name length?Excel 工作表的名称长度是否有限制?
【发布时间】:2018-03-30 00:07:07
【问题描述】:

当我尝试使用以下代码使用 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,但它抱怨工作表名称太长。我查看了this related answer 中提到的Excel 2007 specifications and limits,但我找不到它提到任何这样的限制。 (尝试手动重命名工作表表明可能存在这样的限制)

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

【问题讨论】:

    标签: excel


    【解决方案1】:

    该文件格式允许最多 255 个字符的工作表名称,但如果 Excel 用户界面不希望您超过 31 个字符,请不要尝试超过 31 个。应用程序充满了奇怪的未记录限制和怪癖,并且提供符合规范但不在测试人员测试范围内的 it 文件通常会导致非常奇怪的行为。 (个人最喜欢的例子:使用 Excel 4.0 字节码作为 if() 函数,在具有 Excel 97 样式字符串表的文件中,禁用 Excel 97 中粗体的工具栏按钮。)

    【讨论】:

    • 31 个字符的限制是不可接受的
    • 很棒的错误!想要一个作为交换? ;-)
    • 此外,OpenXML API 允许您将任意长度的字符串分配给工作表标签,同时如果字符串超过 UI 驱动的限制,Excel 会抱怨文件损坏。因此,对于任何人来说,31 个字符都应该足够了。
    • 注意:Excel 工作表名称不能包含引号(在处理纯大写字符串时经常在我的语言中使用)
    • 现在遇到了...想更改ComboBox 的名称。一切正常,直到我重新启动 Excel。然后名称突然被重置为其原始状态(“ComboBox1”)。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我使用以下 vba 代码,其中文件名是包含我想要的文件名的字符串,函数 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】:

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

        【讨论】:

        • 这不是一个真正的答案,最好作为评论。
        • 好吧,没有解决办法。所以这项工作是我们最接近解决方案的事情。您也可以对没有提供解决方案或建议的其他 2 个 cmets 这么说。
        【解决方案5】:

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

        并且尝试将不太长的基本名称移动到太长的路径名也很清楚:

        不过,路径名错误具有欺骗性。很没用:

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

        【讨论】:

          猜你喜欢
          • 2022-12-11
          • 1970-01-01
          • 1970-01-01
          • 2015-01-06
          • 2011-05-29
          • 2020-06-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多