Excelのシート一覧が欲しい
今日、はてなブックマークを眺めていたら、Yahoo!知恵袋の質問が目に入りました。detail.chiebukuro.yahoo.co.jp
みんな、似たようなこと考えるんですね。私も以前、複数のExcelファイルのなかの複数のシート一覧が欲しくなったので、Ruby と Win32OLE を利用して雑にシート一覧を取得するスクリプトを書いたことがあります。
せっかくなので、久しぶりに動かしてみました。手元にある Windows 7 Pro 64bit, Office 2007 環境に Ruby Installer 2.2.2 を入れてみたところ、問題なく動きました。
#!ruby -Ks require 'date' require 'win32ole' #---------- file_dir = 'C:\dev\work\files' xls_files = '*.xls' xlsx_files = '*.xlsx' #---------- def getPath(filename) f = WIN32OLE.new('Scripting.FileSystemObject') return f.GetAbsolutePathName(filename) end def getData(filename, excel, output_sheet, num) book = excel.Workbooks.Open(filename) begin worksheet_num = 0 book.WorkSheets.each do |sheet| num = num + 1 output_A = "A" + num.to_s output_B = "B" + num.to_s output_sheet.Range(output_A).value = book.Name output_sheet.Range(output_B).value = sheet.Name end ensure book.Close end return num end excel = WIN32OLE.new('Excel.Application') output_book = excel.workbooks.add output_sheet = output_book.Worksheets(1) counter = 0 Dir.chdir(file_dir) Dir.glob(xls_files) do |f| filename = getPath(f) counter = getData(filename, excel, output_sheet, counter) end Dir.glob(xlsx_files) do |f| filename = getPath(f) counter = getData(filename, excel, output_sheet, counter) end t = Time.now output_filename = t.strftime("%Y%m%d_%H%M") + '.xlsx' output_filepath = file_dir + '\_' + output_filename output_book.saveAs output_filepath output_book.Close
C:¥dev¥work¥files 以下にある xls, xlsx ファイルについて、A列にファイル名を、B列にファイル名を出力します。
取得できました! わーい!
さて、取得できたのはよいのですが、とりあえず動けばいいやという雑なコードですね。
僕は仕事で Ruby を使ったことがなく手元で参考書とかみながら書いているというレベルなので、ちゃんとした書き方など教えてください。
というか、こういうのこそ GitHub に載せるべきですね。そのうちやります...