Excelで出力したTSV(CSV)をhtmlテーブルに変換する
Excelで「ファイルを保存」をして保存したTSV(CSV)ファイルを対象とする。
その場合、次のような仕様になるらしい。
・改行コード(レコードの区切り)はCRLF
・セル内に「"」か改行を含む場合はフィールドが""で囲まれる。
・セル内の「"」は「""」になり、改行はLFになる。
Excelで範囲選択してコピーしてテキストエディタにペーストするとタブ区切りになるが、こちらは「"」の扱いが微妙に異なるので、対象外とする。
#!/usr/bin/env ruby # # Excelのtsvをhtmlテーブルに変換するスクリプト # SEPARATOR = "\t" def escapeHTML(str) str.gsub!("&", "&") str.gsub!("\"", """) str.gsub!("<", "<") str.gsub!(">", ">") return str end csv = open(ARGV[0], "rb").read() puts <<EOF <style> .resultTable { border:1px solid #cccccc; border-collapse:collapse; } .resultTable th,td { border:1px solid #cccccc; } </style> EOF puts '<table class="resultTable">' lines = csv.split("\r\n") lines.each do |line| puts "<tr>" fields = line.split(SEPARATOR) fields.each do |f| if f.length > 0 && f[0].chr == '"' && f[-1].chr == '"' f = f[1...-1].gsub('""', '"') end puts "<td>" + escapeHTML(f).gsub("\n", "<br>") + "</td>" end puts "</tr>" end puts "</table>"