Excel データから配列データへの変換
例えば Excel のデータで
hoge | hogehoge |
mokemokke | mokeke |
となってるデータをこんな風に整形して貼り付けたいわけです。
{ hoge, hogehoge, }, { mokemokke, mokeke, },
ツールを探せばいくらでもありそうですが、探すより書いたほうが早そうなのでこれを C# で書いてみました。
public string ExcelFormatToArray(string str) { List<List<string>> data = new List<List<string>>(); // 全ての行を \t で分割して2次元のデータに変換 using (StringReader reader = new StringReader(str)) { string read; while ((read = reader.ReadLine()) != null) { data.Add(new List<string>(read.Split('\t'))); } } // カラムの足りてないところに空文字を追加 // むしろあるのはおかしいのだから例外を投げてやるべきかも。 int max = data.Max(list => list.Count); data.ForEach(list => { while (list.Count < max) list.Add(""); }); // 各行の桁を最大値に揃える for (int i = 0; i < max; i++) { int smax = data.Max(list => list[i].Length); data.ForEach(list => list[i] = list[i].PadLeft(smax)); } // 結合 StringBuilder builder = new StringBuilder(); foreach (var list in data) { builder.Append("{ "); foreach (var s in list) { builder.Append(s + ", "); } builder.AppendLine("},"); } return builder.ToString(); }
プロジェクトを作って配置してコーディング済ませて起動するまで10分でいけました(コメントは後で付け足したけど)。
目的のデータも変換してみたけど(珍しく)特に問題なく成功。これぐらいのコードなら 90% ぐらいはバグなしで動作できるようにしたいなぁ……。
今考えてみると、整形ツール探したほうが今度また別の変換したいときに便利だろうから、実はそっちの方が良かったのかなーとか思ってみたり。