ワークシートを追加する
新しいワークシートを追加するには、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();