スプレッドシート ドキュメントの非表示のワークシートのリストを取得する
このトピックでは、ドキュメントを Excel に読み込むことなく、Open XML SDK 2.0 for Microsoft Office のクラスを使用して、Microsoft Office Excel 2007 または Microsoft Excel 2010 ブックの非表示ワークシートのリストをブログラムで取得する方法を示します。このトピックでは、この作業を説明するために GetHiddenSheets メソッドの例を使用しています。
適用対象: Excel 2010 | Office 2010 | PowerPoint 2010 | Word 2010
この記事の内容
GetHiddenSheets メソッド
GetHiddenSheets メソッドの呼び出し
コードの動作のしくみ
ワークシートのコレクションの取得
非表示シートの取得
サンプル コード
このトピックのサンプル コードを使用するには、Open XML SDK 2.0 をインストールする必要があります。プロジェクトで次のアセンブリを明示的に参照する必要があります。
WindowsBase
DocumentFormat.OpenXml (Open XML SDK によってインストールされます)
このトピックのコードをコンパイルするには、次の using ディレクティブまたは Imports ステートメントも使用する必要があります。
using System;
using System.Collections.Generic;
using System.Linq;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
Imports DocumentFormat.OpenXml.Spreadsheet
Imports DocumentFormat.OpenXml.Packaging
GetHiddenSheets メソッド
以下のコードに示すように、GetHiddenSheets メソッドを使用して、ブック内の非表示ワークシートのリストを取得できます。GetHiddenSheets メソッドは、1 つのパラメーターを受け取ります。このパラメーターは、検証するファイルのパスを示す文字列です。
public static List<Sheet> GetHiddenSheets(string fileName)
Public Function GetHiddenSheets(ByVal fileName As String) As List(Of Sheet)
メソッドは指定されたブックを処理し、List<T> インスタンスに各非表示 Sheet オブジェクトに対する参照を格納します。
GetHiddenSheets メソッドの呼び出し
メソッドは、個々の非表示 Sheet オブジェクトに関する情報を含む一般的なリストを返します。GetHiddenWorksheets メソッドを呼び出すには、次のコードに示すように、必要なパラメーター値を渡します。
// Revise this path to the location of a file that contains hidden worksheets.
const string DEMOPATH =
@"C:\Users\Public\Documents\HiddenSheets.xlsx";
List<Sheet> sheets = GetHiddenSheets(DEMOPATH);
foreach (var sheet in sheets)
{
Console.WriteLine(sheet.Name);
}
' Revise this path to the location of a file that contains hidden worksheets.
Const DEMOPATH As String =
"C:\Users\Public\Documents\HiddenSheets.xlsx"
Dim sheets As List(Of Sheet) = GetHiddenSheets(DEMOPATH)
For Each sheet In sheets
Console.WriteLine(sheet.Name)
Next
コードの動作のしくみ
以下のコードでは、まず、非表示ワークシートに関する情報を含む一般的なリストを作成します。
List<Sheet> returnVal = new List<Sheet>();
Dim returnVal As New List(Of Sheet)
次に、SpreadsheetDocument.Open メソッドを使用し、(最後のパラメーター値を false に設定して) 読み取り専用でブックを開きます。さらにブックの WorkbookPart プロパティを使用して、メインのブック パーツに移動し、その参照を wbPart という変数に格納します。
using (SpreadsheetDocument document =
SpreadsheetDocument.Open(fileName, false))
{
WorkbookPart wbPart = document.WorkbookPart;
// Code removed here…
}
return returnVal;
Using document As SpreadsheetDocument = SpreadsheetDocument.Open(fileName, False)
Dim wbPart As WorkbookPart = document.WorkbookPart
' Code removed here…
End Using
Return returnVal
ワークシートのコレクションの取得
WorkbookPart クラスには、ブックの XML コンテンツを含む Workbook プロパティがあります。Open XML SDK 2.0 には、Sheet パーツのコレクションを返す Sheets プロパティがありますが、必要な情報はすべて、Workbook XML コンテンツ内の Sheet 要素から提供されます。以下のコードでは、Workbook オブジェクトの Descendants 汎用メソッドを使用して、ブックの XML コンテンツのシート子要素に関するすべての情報を含む Sheet オブジェクトのコレクションを取得します。
var sheets = wbPart.Workbook.Descendants<Sheet>();
Dim sheets = wbPart.Workbook.Descendants(Of Sheet)()
非表示シートの取得
Excel では、2 つのレベルでワークシートを非表示にできることを認識しておくことは重要です。Excel ユーザー インターフェイスを使用し、ワークシートのタブを右クリックしてワークシートの非表示を選ぶと、ワークシートを非表示にできます。このようなワークシートでは、Sheet オブジェクトの State プロパティに Hidden 列挙値が含まれます。シートの Visible プロパティを xlSheetVeryHidden 列挙値に設定するコードを (VBA または他の言語で) 作成して、ワークシートを非表示にすることもできます。このような方法で非表示にされるワークシートでは、Sheet オブジェクトの State プロパティに VeryHidden 列挙値が含まれます。
コレクションにすべてのシートに関する情報が含まれる場合、以下のコードでは、Where 関数を使用してコレクションをフィルター処理し、State プロパティが null でないシートのみがコレクションに含まれるようにします。State プロパティが null でない場合、コードは、State プロパティに SheetStateValues.Hidden または SheetStateValues.VeryHidden が設定された Sheet オブジェクトを検索します。
var hiddenSheets = sheets.Where((item) => item.State != null &&
item.State.HasValue &&
(item.State.Value == SheetStateValues.Hidden ||
item.State.Value == SheetStateValues.VeryHidden));
Dim hiddenSheets = sheets.Where(Function(item) item.State IsNot
Nothing AndAlso item.State.HasValue _
AndAlso (item.State.Value = SheetStateValues.Hidden Or _
item.State.Value = SheetStateValues.VeryHidden))
最後に、以下のコードは ToList<TSource> メソッドを呼び出し、非表示シートのリストを呼び出す LINQ クエリを実行し、その結果を関数の戻り値に格納します。
returnVal = hiddenSheets.ToList();
returnVal = hiddenSheets.ToList()
サンプル コード
以下に、C# と Visual Basic の完全な GetHiddenSheets コード サンプルを示します。
public static List<Sheet> GetHiddenSheets(string fileName)
{
List<Sheet> returnVal = new List<Sheet>();
using (SpreadsheetDocument document =
SpreadsheetDocument.Open(fileName, false))
{
WorkbookPart wbPart = document.WorkbookPart;
var sheets = wbPart.Workbook.Descendants<Sheet>();
// Look for sheets where there is a State attribute defined,
// where the State has a value,
// and where the value is either Hidden or VeryHidden.
var hiddenSheets = sheets.Where((item) => item.State != null &&
item.State.HasValue &&
(item.State.Value == SheetStateValues.Hidden ||
item.State.Value == SheetStateValues.VeryHidden));
returnVal = hiddenSheets.ToList();
}
return returnVal;
}
Public Function GetHiddenSheets(ByVal fileName As String) As List(Of Sheet)
Dim returnVal As New List(Of Sheet)
Using document As SpreadsheetDocument =
SpreadsheetDocument.Open(fileName, False)
Dim wbPart As WorkbookPart = document.WorkbookPart
Dim sheets = wbPart.Workbook.Descendants(Of Sheet)()
' Look for sheets where there is a State attribute defined,
' where the State has a value,
' and where the value is either Hidden or VeryHidden:
Dim hiddenSheets = sheets.Where(Function(item) item.State IsNot
Nothing AndAlso item.State.HasValue _
AndAlso (item.State.Value = SheetStateValues.Hidden Or _
item.State.Value = SheetStateValues.VeryHidden))
returnVal = hiddenSheets.ToList()
End Using
Return returnVal
End Function
関連項目
参照
その他の技術情報
Retrieving a List of Hidden Worksheets from Excel 2010 Workbooks by Using the Open XML SDK 2.0