Tbpgr Blog

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

Ruby | Rubyを使ってExcelのテスト仕様書にymlのデータを設定する

概要

Rubyを使ってExcelのテスト仕様書にymlのデータを設定する

詳細

win32oleを利用して、RubyからExcelを操作することが可能です。

ここでは、
・任意の行、任意の列を開始位置とする
・任意の項目数を出力する
・入力元はymlファイル
yamlに設定してある以下の情報を基準に出力
・シート名=>出力対象シートを選択 例:サンプル1
・開始行=>開始行 例:7
・開始列=>開始列 例:B
・見出 =>見出し項目のリスト 例:[見出し1, 見出し2, 見出し3, 見出し4, 見出し5]

この例を少しカスタマイズすればyamlを基礎データとしたテスト仕様書の完成。
Excelはあくまで見た目だけの役割。
データ本体はyamlに持たせて他の加工にも流用可能、と。

サンプルコード
# encoding: utf-8
require 'pp'

require 'win32ole'
require 'yaml'

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

def get_args_value(index, extension)
  raise "#{index + 1}引数に#{extension.slice(1,extension.size)}ファイルを指定してください" if ARGV[index].nil?
  unless File::extname(ARGV[index]) == extension
    raise "#{index + 1}引数に#{extension.slice(1,extension.size)}以外のファイルが指定されています"
  end
  ARGV[index]
end

CASES_KEY = "ケース"
START_COLUMN_KEY = "開始列"
START_ROW_KEY = "開始行"
CASE_KEY_LIST_KEY = "見出"
CATEGORY_KEY = "シート名"

begin
  input_yml = get_args_value(0, ".yml")
  output_xlsx =  get_args_value(1, ".xlsx")

  yml = YAML.load_file input_yml
  START_COLUMN = yml[START_COLUMN_KEY]
  START_ROW = yml[START_ROW_KEY]
  CASE_KEY_LIST = yml[CASE_KEY_LIST_KEY]

  xl = WIN32OLE.new('Excel.Application')
  book  = xl.Workbooks.Open(get_absolute_path(output_xlsx))
  sheet = xl.Worksheets.Item(yml[CATEGORY_KEY])

  current_row = START_ROW.to_i

  # ケース
  yml[CASES_KEY].each do |test_case|
    current_column = START_COLUMN
    CASE_KEY_LIST.each do |key|
      sheet.Range("#{current_column}#{current_row.to_s}").Value = test_case[key]
      current_column = current_column.succ
    end
    current_row = current_row.succ
  end

  book.Save
  puts "正常終了。#{ARGV[1]}をご確認ください"
rescue
  puts "例外発生"
  puts $!
  puts $@
ensure
  book.Close unless book
  xl.Quit
end
出力元yaml
システム名: 
テスト分類: XXX
シート名: サンプル1
開始行: 7
開始列: B
見出: [見出し1, 見出し2, 見出し3, 見出し4, 見出し5]
ケース: 
    - 
      見出し1: 値1_1
      見出し2: 値1_2
      見出し3: 値1_3
      見出し4: 値1_4
      見出し5: 値1_5
# **************************************************
    - 
      見出し1: 値2_1
      見出し2: 値2_2
      見出し3: 値2_3
      見出し4: 値2_4
      見出し5: 値2_5
# **************************************************
出力先xlsx(出力前後)

出力前

出力後