1. ホーム
  2. excel

Excelのワークシートの名前の長さに制限はありますか?

2023-12-02 06:52:54

質問

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を見ると、Excel2007が動いているのですが、ワークシート名が長すぎると文句を言われます。私は、以下のものを見てみました。 Excel 2007 の仕様と制限 に書かれているように この関連回答 にあるように、私はそのような制限に言及するものを見つけることができませんでした。(手動でワークシートの名前を変更しようとすると、そのような制限があるかもしれないことを示唆します。)

制限はあるのでしょうか、また、それは厳しい制限なのでしょうか、それとも Excel の設定を変更することによって変更できるものなのでしょうか。

どのように解決するのですか?

ファイル形式は 255 文字のワークシート名まで許可しますが、Excel UI が 31 文字を超えることを望んでいない場合は、31 文字を超えようとしないでください。アプリには文書化されていない奇妙な制限や癖がたくさんあり、仕様の範囲内であってもテスターがテストしたであろう範囲外のファイルを与えると、たいてい本当に奇妙な動作が起こります。(個人的に好きな例: Excel 97 形式の文字列表を含むファイルで if() 関数に Excel 4.0 のバイトコードを使用すると、Excel 97 の太字用のツールバー ボタンが無効になりました。)