LINQ to Excel を作ってみる その1

いまいち、まだLINQの仕組みがよくわからない。whereやselectなどの演算子が対応する拡張メソッドにマップされたりするのはわかるけど、その式がどうやって(どこで?)SQLやらXPath(かどうかは知らないけど)やらに変換されているのかがわからない。

じゃあ理解するために自分でもLINQ to 「****」を作ってみたらいいんじゃね?
ということで、身近なところでExcelワークブックやセルに対してクエリを掛けられる「LINQ to Excel」を作ってみる事にした。

イメージとしては、

指定した文字列が含まれるシートを列挙する
XlsWorkbook book = new XlsWorkbook("100.xls");

var sheets = from s in book.Worksheets
             where s.Name.Contains("hoge")
             select s;

foreach(var sheet in sheets) Console.WriteLine(sheet.Name);
シートから指定した文字列が含まれているセルを列挙する
XlsWorkbook book = new XlsWorkbook("100.xls");
// 全セルを対象
var cells = from c in book.Worksheets[0].Cells
            where c.Text.Contains("hoge")
            select s
シートから指定した範囲内のデータを読み出して一行ずつ列挙する
XlsWorkbook book = new XlsWorkbook("customer.xls");
// 開始行番号、開始列番号、終了列番号
var objs = from row in book.Worksheets[0].EachRows(4, 2, 3)
           where !row[0].IsEmpty    // この条件がtrueの行まで列挙する
           select new {
               ID=row[0].Value<int>(),
               Name=row[1].Text
           }
  • データ

意味のある機能かどうかは別として、おもしろそうなので作ってみる。