ワークシートを追加する

 

新しいワークシートを追加するには、ExcelWorksheets.Add メソッドを使う。

 

var sheet = package.Workbook.Worksheets.Add("Sheet1");

 

ワークシートをコピーする

 

ワークシートをコピーするには、ExcelWorksheets.Add メソッドの第2引数にコピー元のワークシートのオブジェクトを指定する。

 

// Sheet1シートを追加
var sheet1 = package.Workbook.Worksheets.Add("Sheet1");

// Sheet1シートをコピーして、Sheet2シートを追加
var sheet2 = package.Workbook.Worksheets.Add("Sheet2", sheet1);

 

Worksheets.Copy メソッドを使ってもよい。

 

// Sheet1シートをコピーして、Sheet3シートを追加
var sheet3 = package.Workbook.Worksheets.Copy("Sheet1", "Sheet3");

 

ワークシートを取得する

 

ワークシートを取得するには、ExcelWorksheets コレクションをインデクサー(大かっこ)を使ってアクセスする。
アクセスにはインデックス、またはシート名が使える。

 

// 最初のシートを取得
var sheet1st = package.Workbook.Worksheets[1];

// シート名が Sheet2 のシートを取得
var sheet2nd = package.Workbook.Worksheets["Sheet2"];

 

 

存在しないインデックスを指定した場合と、存在しない名前を指定した場合で動きがちがう。

 

存在しないインデックスを指定すると IndexOutOfRangeException が発生する。
存在しないシート名を指定すると null が返る。

 

var sheet3rd = package.Workbook.Worksheets[99];
// → System.IndexOutOfRangeException: 'Worksheet position out of range.'

var sheet4th = package.Workbook.Worksheets["Sheet99"];
// → null

 

ワークシートを削除する

 

ワークシートを削除するには、Worksheets.Delete メソッドを使う。
シートの指定には、ワークシートのオブジェクト、インデックス、シート名のいずれかが使える。

 

// オブジェクト指定
package.Workbook.Worksheets.Delete(sheet1);

// シート名指定
package.Workbook.Worksheets.Delete("Sheet2");

// インデックス指定
package.Workbook.Worksheets.Delete(1);

 

削除対象のワークシートが存在しなかった場合は例外が起きる。
シートの指定方法によって、異なる例外が起きた。

 

存在しないオブジェクト → System.ArgumentException: Worksheet is not in the collection.

 

存在しないインデックス → System.Collections.Generic.KeyNotFoundException: 指定されたキーはディレクトリ内に存在しませんでした。

 

存在しないシート名 → System.ArgumentException: Could not find worksheet to delete ‘Sheet99’

 

ワークシートを移動する

 

ワークシートを移動するには、Worksheets.MoveXXX のメソッドを使う。
MoveXXX には次の4種類がある。

 

  • MoveAfter : 指定したシートを指定したシートの後ろに移動
  • MoveBefore : 指定したシートを指定したシートの前に移動
  • MoveToEnd : 指定したシートを最後に移動
  • MoveToStart : 指定したシートを最初に移動

 

ワークシートはインデックスまたはシート名で指定する。

 

// Sheet1シートをSheet2シートの後ろに移動
package.Workbook.Worksheets.MoveAfter("Sheet1", "Sheet2");

// Sheet3シートをSheet1シートの前に移動
package.Workbook.Worksheets.MoveBefore("Sheet3", "Sheet1");

// Sheet2シートを最後に移動
package.Workbook.Worksheets.MoveToEnd("Sheet2");

// Sheet4シートを最初に移動
package.Workbook.Worksheets.MoveToStart("Sheet4");

 

ワークシートの数を取得する

 

ブック内のワークシートの数を取得するには、Worksheets.Count プロパティを使う。

 

Console.WriteLine("Number of worksheets: {0}", package.Workbook.Worksheets.Count);

 

ワークシートのインデックスの開始値を確認する

 

ワークシートのインデックスは 0 または 1 から始まる。

 

どちらから始まるかは ExcelPackage.Compatibility.IsWorksheets1Based プロパティで確認できる。
プロパティが true なら 1 開始、そうでないなら 0 開始である。

 

ちなみにプロパティの既定値は、環境によって異なる。

 

.NET 3.5 または .NET 4 なら true(1 開始)、.NET Core なら false(0 開始)となる。

 

// インデックスの開始値を求める
// IsWorksheets1Basedプロパティがtrueなら1開始、それ以外なら0開始
int startIndex = 0;
if (package.Compatibility.IsWorksheets1Based)
{
    startIndex = 1;
}

 

ワークシートのインデックスを取得する

 

ワークシートのインデックスを取得するには ExcelWorksheet.Index プロパティを使う。
(取得のみで変更は不可能)

 

var sheet1 = package.Workbook.Worksheets["Sheet1"];
Console.WriteLine("Index: {0}", sheet1.Index);

 

ワークシートの名前を取得/設定する

 

ワークシート名を取得/設定するには ExcelWorksheet.Name プロパティを使う。

 

たとえば、シート名を Sheet1 から NewSheet に変更するには次のように書く。

 

var sheet = package.Workbook.Worksheets["Sheet1"];
sheet.Name = "NewSheet";

 

ワークシートの表示/非表示を設定する

 

ワークシートが非表示かどうかを取得、またはその状態を変更するには ExcelWorksheet.Hidden プロパティを使う。

 

Hidden プロパティの値の意味は以下のとおり。

 

  • eWorkSheetHidden.Visible : 表示
  • eWorkSheetHidden.Hidden : 非表示
  • eWorkSheetHidden.VeryHidden : 非表示(Excel で右クリックして再表示してもリストに出てこない。つまり表示できない)

 

たとえば、Sheet1 シートの表示/非表示を切り替えるには次のように書く。

 

var sheet1 = package.Workbook.Worksheets["Sheet1"];

// シートを表示する
sheet1.Hidden = eWorkSheetHidden.Visible;

// シートを非表示にする
sheet1.Hidden = eWorkSheetHidden.Hidden;

// シートを非表示にする。このシートはExcelの操作で表示させることはできない
sheet1.Hidden = eWorkSheetHidden.VeryHidden;

 

アクティブシートを設定する

 

アクティブシートを設定するには ExcelWorksheet.Select メソッドを使う。

 

たとえば Sheet1 シートをアクティブにするには次のように書く。

 

var sheet1 = package.Workbook.Worksheets["Sheet1"];
sheet1.Select();