2010-09-10 35 views
51

Cuando intento configurar un nombre de hoja alargada usando rubí y win32ole con el siguiente código:¿Existe un límite en la longitud del nombre de una hoja de cálculo de Excel?

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 

me sale el siguiente:

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>' 

La versión 12.0 indica que estoy ejecutando Excel 2007 , pero se queja de que el nombre de la hoja de trabajo es demasiado largo. Eché un vistazo a Excel 2007 specifications and limits como se menciona en this related answer, y no pude encontrarlo mencionando dicho límite. (Intentar cambiar el nombre de una hoja de cálculo manualmente sugiere que puede haber tal límite, sin embargo)

¿Existe un límite, y es un límite difícil o uno que se puede cambiar cambiando la configuración de Excel?

+0

https://excelibrib.tips.net/T013175_Using_Very_Long_Worksheet_Tab_Names.html puede ser de interés, aunque no reciente. – pnuts

Respuesta

80

El formato de archivo permitiría nombres de hoja de trabajo de hasta 255 caracteres, pero si la UI de Excel no desea que exceda de 31 caracteres, no intente ir más allá de 31. La aplicación está llena de extraños limites y peculiaridades no documentadas, y Al alimentar archivos que están dentro de las especificaciones, pero que no están dentro del rango de cosas que los probadores habrían probado, usualmente causan un comportamiento REALMENTE extraño. (Ejemplo favorito personal: utilizando el código de bytes de Excel 4.0 para una función if(), en un archivo con una tabla de cadenas estilo Excel 97, deshabilitó el botón de la barra de herramientas para negrita en Excel 97.)

+36

Ese límite de 31 caracteres es * NO ACEPTABLE *. –

+18

Así que escriba una mejor hoja de cálculo :) – mjfgates

+1

TERRIFIC bug! ¿Desea uno a cambio? ;-) –

7

Al cambiar el nombre de una hoja de trabajo manualmente en Excel, se alcanza un límite de 31 caracteres, por lo que sugiero que ese es un límite estricto.

1

Mi solución fue usar un corto apodo (menos de 31 caracteres) y luego escribir el nombre completo de la celda 0.

+3

Esto no es realmente una respuesta y sería mejor como comentario. –

+2

Bueno, no hay solución. Entonces este trabajo es lo más cercano que tenemos a una solución. También podría decir eso a los otros 2 comentarios que no proporcionaron una solución o sugerencia. – nikon0iT

1

uso el siguiente código VBA donde fichero es una cadena que contiene el nombre del archivo que quiero, y RemoveSpecialCharactersAndTruncate función se define a continuación:

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 
Cuestiones relacionadas