ワークシートをソートする

Excelファイル内のワークシートをソートしてみる。

ソート前

やりかた

Excelのマクロ記録機能を使って、ワークシートを移動させてみると、Worksheet#Moveを使えばいいことがわかる。

ワークシート名の名前のリストをつくり、それをソートしておく。ソート結果順にワークシートを一番後ろに移動させていけば、 最終的にはワークシートがソートされるというわけだ。

ソート方法

ソートするスクリプト

ソートする元ファイルを以下に示す。

これを、以下のスクリプトで処理すれば、ソートできる。

  require 'excel_lib'
  
  excel = Excel.new
  book = excel.copy_book("./sheets_sort.xls")
  # ワークシート名のリストを作成
  sheetname_list = []
  book.sheets.each {|sheet|
    sheetname_list.push sheet.name
  }
  sheetname_list.sort!
  
  sheet_size = book.sheets.size
  sheetname_list.each {|sheet_name|
    book.sheets[sheet_name].move("After"=>book.sheets[sheet_size].raw)  # (A)
    puts "#{sheet_name}->Last"
  }
  

解説する。

  • (A)で所定のシートを最後のワークシートの後ろに移す。move()はワークシートを移動させるメソッド。
  • 名前付き引数にはどこのワークシートの後ろに移動すればいいかを指定する。ここも生のWorksheetオブジェクトを指定しないといけないので、 rawメソッドで生のオブジェクトを指定している。


戻る