2010-09-10 94 views
51

Khi tôi cố gắng thiết lập một tên bảng hơi dài sử dụng ruby ​​và win32ole với đoạn mã sau:Có giới hạn về độ dài tên bảng tính của Excel không?

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 

tôi nhận được như sau:

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

Phiên bản 12.0 chỉ ra rằng tôi đang chạy Excel 2007 , nhưng nó phàn nàn rằng tên bảng tính quá dài. Tôi đã xem Excel 2007 specifications and limits như đã đề cập trong this related answer và tôi không thể tìm thấy nó đề cập đến bất kỳ giới hạn nào như vậy. (Tuy nhiên, cố gắng đổi tên trang tính theo cách thủ công có thể có giới hạn như vậy)

Có giới hạn hay không và có thể thay đổi giới hạn bằng cách thay đổi cấu hình của Excel không?

+0

https://excelribbon.tips.net/T013175_Using_Very_Long_Worksheet_Tab_Names.html có thể được quan tâm, mặc dù không phải gần đây. – pnuts

Trả lời

80

Định dạng tệp sẽ cho phép tối đa 255 ký tự bảng tính, nhưng nếu giao diện người dùng Excel không muốn bạn vượt quá 31 ký tự, đừng cố gắng vượt quá 31. Ứng dụng đầy đủ các giới hạn và kỳ quặc không có giấy tờ của ứng dụng, và cho ăn các tập tin trong phạm vi thông số kỹ thuật nhưng không nằm trong phạm vi của những điều mà người kiểm thử sẽ thử nghiệm thường gây ra hành vi kỳ lạ thực sự. (Ví dụ yêu thích cá nhân: sử dụng bytecode Excel 4.0 cho một hàm if(), trong một tệp có chuỗi có kiểu Excel 97, vô hiệu hóa nút thanh công cụ để in đậm trong Excel 97.)

+36

Giới hạn 31 ký tự đó là * KHÔNG CHẤP NHẬN *. –

+18

Vì vậy, hãy viết bảng tính tốt hơn :) – mjfgates

+1

Lỗi TERRIFIC! Muốn trao đổi? ;-) –

7

Đổi tên trang tính theo cách thủ công trong Excel, bạn đã đạt đến giới hạn 31 ký tự, vì vậy tôi khuyên bạn nên giới hạn đó là một giới hạn khó.

1

Giải pháp của tôi là sử dụng một đoạn ngắn nickname (ít hơn 31 ký tự) và sau đó viết toàn bộ tên trong tế bào 0.

+3

Đây không thực sự là câu trả lời và sẽ tốt hơn như bình luận. –

+2

Cũng không có giải pháp. Vì vậy, điều này làm việc xung quanh là điều gần nhất chúng ta có một giải pháp. Bạn cũng có thể nói rằng với 2 ý kiến ​​khác không cung cấp giải pháp hoặc đề xuất. – nikon0iT

1

tôi sử dụng mã VBA sau đây filename là một chuỗi chứa tên tập tin tôi muốn, và Chức năng RemoveSpecialCharactersAndTruncate được định nghĩa dưới đây:

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 
Các vấn đề liên quan