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% ぐらいはバグなしで動作できるようにしたいなぁ……。




今考えてみると、整形ツール探したほうが今度また別の変換したいときに便利だろうから、実はそっちの方が良かったのかなーとか思ってみたり。