Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | Excelのシート名を一括取得し、標準出力する

概要

Excelのシート名を一括取得し、標準出力する

内容

Excelのシート名を一括取得し、標準出力します
用途としては大量のシートが存在する場合の手作業の削減。
開発作業の都合上、シート名を別のプレーンテキストに利用したい場合、など。

仕様

・引数は1つ
・引数はファイル名
・結果は1シート1行で標準出力。順序は定義順に保持する
Unixの理念に基づいてシンプルな機能に専念。やりたいことがあれば他のコマンドと組み合わせる

サンプルコード

# encoding: utf-8
require 'pp'
require 'win32ole'
require_relative "standard_io"

class ExcelSheets
  include StandardIo
  validate_args_counts 1
  validate_file 0

  def initialize(args)
    @args = args
  end

  def sheets
    begin
      xl = WIN32OLE.new('Excel.Application')
      book  = xl.Workbooks.Open(get_absolute_path(@args[0]))
      xl.Worksheets.each{|s|puts s.name.encode "utf-8"}
    rescue
      puts "例外発生"
      puts $!
      puts $@
    ensure
      xl.Workbooks.Close
      xl.Quit
    end
  end

  private
  def get_absolute_path(filename)
    fso = WIN32OLE.new('Scripting.FileSystemObject')
    return fso.getAbsolutePathName(filename)
  end
end

excel_sheets = ExcelSheets.new($*)
exit unless excel_sheets.validate
excel_sheets.sheets

standard_io

standard_io部に関しては下記記事参照
Ruby | 標準入出力処理時のValidationをクラスマクロで共通化
http://d.hatena.ne.jp/tbpg/20130625/1372165415

サンプルExcel

出力

$ ruby excel_sheets.rb hoge.xlsx
hoge
hige
hage