セルにアクセスする

 

セルにアクセスするには 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;