不労所得を確保セヨ!!シストレ24戦記
http://sysken.blogspot.jp/
FX会社から提供される取引報告のExcelファイルから、HTMLの表組みを手作業で行なっていたのだが、件数が多いと時間がかかる。
そこで、下記の記事を参考にして、RubyでExcelファイルから値を抜き出してHTMLに変換するプログラムを作成してみた。
VBA より便利で手軽 Excel 操作スクリプト言語「Ruby」へのお誘い (前編)
http://jp.rubyist.net/magazine/?0027-ExcellentRuby
Excelで値を取り出してしまえば、後は通常のRubyのプログラムと同様に値を扱えば良い。
数字をカンマ区切りにするのは、下記の記事を参考にさせていただいた。
Re: 金額カンマ編集について
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/37580
以下、作成したソースコード。
# encoding: CP932 require 'win32ole' # ストラテジー別の最終取り引き回数(手動で変更) RIKIWIKITAVYFX_USDJPY_LAST = 173 PMINVESTCAPITAL_EURGBP_LAST = 95 DBSWING_EURUSD_LAST = 28 T_Follow_EURUSD_LAST = 10 # 表組み用HTML TABLE_HEADER = '<table border="1" bordercolor="#888" cellspacing="0" style="border-collapse: collapse; border-color: rgb(136, 136, 136); border-width: 1px;"><tbody>' + "\n" TABLE_FOOTER = '</tbody></table>' + "\n" FIRST_TAG = '<tr><td style="width: 150px;">' SECOND_TAG = '</td><td style="text-align: right; width: 100px;"><b><span style="color: blue;">' THIRD_TAG = '</span></b></td><td style="text-align: right; width: 100px;"><b><span style="color: blue;">' FOURTH_TAG = '</span></b></td></tr>' + "\n" # ExcelファイルのOpen app = WIN32OLE.new('Excel.Application') book = app.Workbooks.Open(app.GetOpenFilename) # Excelファイルからのデータ抽出 rowIndex = 0 rikiwikitavyfxUSDJPYrowArray = Array.new pminvestcapitalEURGBProwArray = Array.new dbswingEURUSDrowArray = Array.new tfollowEURUSDrowArray = Array.new for row in book.ActiveSheet.UsedRange.Rows do if rowIndex > 0 colIndex = 0 colText = "" colArray = Array.new colArray << '' for cell in row.Columns do if colIndex == 2 || colIndex == 4 || colIndex.between?(10,12) colArray << cell.Value end colIndex += 1 end if colArray[1] == "RikiTikiTavi FX" && colArray[2] == "USDJPY" rikiwikitavyfxUSDJPYrowArray << colArray elsif colArray[1] == "Pminvestcapital" && colArray[2] == "EURGBP" pminvestcapitalEURGBProwArray << colArray elsif colArray[1] == "DBSwing" && colArray[2] == "EURUSD" dbswingEURUSDrowArray << colArray elsif colArray[1] == "T Follow" && colArray[2] == "EURUSD" tfollowEURUSDrowArray << colArray end end rowIndex += 1 end # HTML表組み用関数 def createTable(rowArray, serial, labelSerial) sumPips = 0 sumMoney = 0 table = "<b>" + labelSerial.to_s + ". " table += rowArray[0][1] + ":" table += rowArray[0][2].slice(0, 3) + "/" + rowArray[0][2].slice(3, 3) table += "</b><br />\n" table += "<br />\n" table += "<br />\n" table += "<br />\n" table += TABLE_HEADER rowArray.reverse! for row in rowArray do table += FIRST_TAG table += serial.to_s + "回目の取り引き" if row[4] < 0 table += SECOND_TAG.sub("blue", "red") else table += SECOND_TAG end table += row[4].to_s.reverse.gsub( /(\d{3})(?=\d)/, '\1,' ).reverse + "pips" if row[5] < 0 table += THIRD_TAG.sub("blue", "red") else table += THIRD_TAG end table += row[5].round.to_s.reverse.gsub( /(\d{3})(?=\d)/, '\1,' ).reverse + "円" table += FOURTH_TAG serial += 1 sumPips += row[4] * 10 sumMoney += row[5] end table += FIRST_TAG table += "合 計" if sumPips < 0 table += SECOND_TAG.sub("blue", "red") else table += SECOND_TAG end table += (sumPips / 10).to_s.reverse.gsub( /(\d{3})(?=\d)/, '\1,' ).reverse + "pips" if sumMoney < 0 table += THIRD_TAG.sub("blue", "red") else table += THIRD_TAG end table += sumMoney.round.to_s.reverse.gsub( /(\d{3})(?=\d)/, '\1,' ).reverse + "円" table += FOURTH_TAG table += TABLE_FOOTER table += "<br />\n" table += "<br />\n" table += "<br />\n" return table end # ストラテジー別HTML作成 labelSerial = 1 outputFile = '' if dbswingEURUSDrowArray.size > 0 outputFile += createTable(dbswingEURUSDrowArray, DBSWING_EURUSD_LAST, labelSerial) labelSerial += 1 end if tfollowEURUSDrowArray.size > 0 outputFile += createTable(tfollowEURUSDrowArray, T_Follow_EURUSD_LAST, labelSerial) labelSerial += 1 end if pminvestcapitalEURGBProwArray.size > 0 outputFile += createTable(pminvestcapitalEURGBProwArray, PMINVESTCAPITAL_EURGBP_LAST, labelSerial) labelSerial += 1 end if rikiwikitavyfxUSDJPYrowArray.size > 0 outputFile += createTable(rikiwikitavyfxUSDJPYrowArray, RIKIWIKITAVYFX_USDJPY_LAST, labelSerial) labelSerial += 1 end # HTMLファイルの書き出し outputHTMLFile = "<html><body>\n" outputHTMLFile += outputFile outputHTMLFile += "</body></html>\n" open("シストレ24成績.html", "w") {|f| f.write outputFile} book.close(false) app.quit
0 件のコメント:
コメントを投稿