セルにアクセスする
セルにアクセスするには ExcelWorksheet.Cells プロパティを使う。
インデクサーでセルのアドレス、または行と列の位置を指定してアクセスする。
var sheet = package.Workbook.Worksheets.Add("Sheet1");
// アドレス指定(例: B1セルの取得)
var b1Cell = sheet.Cells["B1"];
// 行列指定(例: C2セルの取得)
var c2Cell = sheet.Cells[2, 3];
// 範囲指定(例: C1~E2セルの取得)
var cells = sheet.Cells[1, 3, 2, 5];
セルに値を設定する
セルに値を設定するには、次のいずれかの方法を使う。
- ExcelWorksheet.SetValue メソッドを使う
- ExcelWorksheet.Cells プロパティを使う
ExcelWorksheet.SetValue メソッドを使う
セルのアドレス、または行と列の位置を指定して値を設定できる。
// アドレス指定
ExcelWorksheet.SetValue(address, value)
// 行列指定
ExcelWorksheet.SetValue(row, column, value)
- address : セルのアドレス(“A1” とか “B2” とか)
- row : 行の位置(1 ~)
- column : 列の位置(1 ~)
- value : 設定する値
SetValue メソッドでは数式は設定できない。
(値として数式が設定されるだけで計算されない)
var sheet = package.Workbook.Worksheets.Add("Sheet1");
// アドレス指定
sheet.SetValue("A1", "あいうえお");
// 行列指定
sheet.SetValue(2, 1, 1000);
// 数式は設定できない
sheet.SetValue("A3", "=NOW()");
ExcelWorksheet.Cells プロパティを使う
ExcelWorksheet.Cells プロパティを使ってもよい。
値を設定するときはセルの Value プロパティ、数式を設定するときはセルの Formula プロパティを設定する。
Value プロパティに数式を設定した場合、SetValue メソッドで数式を設定したときと同じ結果になる。
var sheet = package.Workbook.Worksheets.Add("Sheet1");
// アドレス指定
sheet.Cells["B1"].Value = DateTime.Now;
// 行列指定
sheet.Cells[2, 2].Value = 2000;
// 数式を設定
sheet.Cells["B3"].Formula = "=NOW()";
// Value に数式を入れた場合、値として設定される
sheet.Cells["B4"].Value = "=NOW()";
セルの値を取得する
セルの値を取得するには ExcelWorksheet.GetValue メソッドを使う。
// object型で取得
ExcelWorksheet.GetValue(row, column)
// 指定したデータ型で取得
ExcelWorksheet.GetValue<T>(row, column)
- row : 行の位置(1 ~)
- column : 列の位置(1 ~)
- T : データ型
var sheet = package.Workbook.Worksheets["Sheet1"];
// object型で取得
var a1Value = sheet.GetValue(1, 1);
// 指定した型(この場合はDateTime)で取得
var b1Value = sheet.GetValue<DateTime>(1, 2);
値の設定時と同様に、ExcelWorksheet.Cells プロパティでアクセスしたセルから取得することもできる。
// アドレス指定で取得
var b1Value = sheet.Cells["B1"].Value;
// 行列指定で取得
var b2Value = sheet.Cells[2, 2].Value;
// 数式の取得も可
var b3Formula = sheet.Cells["B3"].Formula;
セルをクリアする
セルをクリアするには Clear メソッドを使う。
Clear メソッドはすべての内容(値や数式、書式など)をクリアする。
値(数式)だけを消したい場合は Value プロパティに null を設定する。
(Formula プロパティは自動でクリアされる)
// A1セルのすべての内容をクリアする
sheet.Cells["A1"].Clear();
// A2セルの値(数式)をクリアする
sheet.Cells["A2"].Value = null;
セルをコピーする
セルをコピーするには Copy メソッドを使う。
すべての内容をコピーするか、数式を除いてコピーするかを指定できる。
// A1セルをA2セルにコピーする
sheet.Cells["A1"].Copy(sheet.Cells["A2"]);
// A1セルをA3セルにコピーする(数式は除く)
sheet.Cells["A1"].Copy(sheet.Cells["A3"], ExcelRangeCopyOptionFlags.ExcludeFormulas);
Excel で操作するときの「形式を選択して貼り付け」の機能はなさそうである。
同様の機能を実現するには、必要な項目だけをコピーするように自分で書く必要がある。
例 : 値のみ貼り付け
// A1セルの値をB1セルにコピー
sheet.Cells["B1"].Value = sheet.Cells["A1"].Value;
例 : 数式のみ貼り付け
// A1セルの数式をB2セルにコピー
sheet.Cells["B2"].Formula = sheet.Cells["A1"].Formula;
例 : 書式のみ貼り付け
// A1セルの書式をB3セルにコピー
sheet.Cells["B3"].StyleID = sheet.Cells["A1"].StyleID;