詳細
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 # **************************************************