C#でのExcel操作取得編
Excel操作インスタンス取得
ファイルを開いていると IOException が出るので、閉じてから実行すること。
var book = new XLWorkbook("C:\\Users\\hoshikouki\\sample.xlsx");
ファイルを開くため当然閉じる処理も必要だが、IDisposableを実装しているため using 構文が使える。
using(var book = new XLWorkbook("C:\\Users\\hoshikouki\\sample.xlsx")) { // 処理 }
シート取得
// ○番目のシート取得 var sheet = book.Worksheet(1); // シート名で取得 var sheet = book.Worksheet("Sheet1");
存在しないシート名や存在しないシート数指定するとExceptionが発生する。
シート名指定の英大・小文字は特に区別しないらしく、"Sheet1"を"SHEET1"でも"SHEet1"でも取得できる。
セル取得
// (行,列)番号で取得 var cell = sheet.Cell(i, j); // 範囲文字列で取得 var cell = sheet.Cell("A5");
行列の番号は1以上で指定する。0指定するとExceptionが発生する。
セル集合取得
セル集合に対する一括操作とかで使う。
// 使用セル全部 var cells = sheet.Cells(); // 範囲文字列で取得 var cells = sheet.Cell("A1:C11"); // 条件でセルを取得(背景色が黄色のセル) var cells = sheet.Cells(x => x.Style.Fill.BackgroundColor == XLColor.Yellow);
条件でセルを取得する場合、全セルを調査しているせいかOutOfMemoryExceptionが発生する。あまりやらない方が良いかも。
セル値取得
// 値や簡単な計算の場合の値取得 var value = cell.Value; // 計算値などを取得する場合 var cell = cell.ValueCached;
Valueプロパティで取得した場合、一部関数(ROW(), COLUMN()など)がサポートされていないようで例外が発生することがある。
ValueCachedプロパティはROW()、COLUMN()が動いた。けれど計算した値でなければNullになる。
このことから、以下のようにすればどちらでもいけそう。
var value = cell.ValueCached ?? cell.Value;
計算式取得
var formula = cell.FormulaA1;
なんでA1なんて名前がついているのか分からんけど、式は取得はできた。