Share via


[方法] Open XML API を使用して Office Open XML パッケージからワークシート情報を取得する

Office Open XML パッケージの仕様は、単一のパッケージに格納されているすべてのパーツのリレーションシップを定義し、コンテンツを含む XML ファイルのセットを定義しています。これらのパッケージは、Microsoft® Office Excel® 2007、Microsoft Office PowerPoint® 2007、および Microsoft Office Word 2007 のドキュメント ファイルを構成するパーツを結合します。Open XML アプリケーション プログラミング インターフェイス (API) を使用して、パッケージを作成したり、パッケージを構成するファイルを操作したりできます。このトピックでは、Excel 2007 で Office Open XML パッケージのワークシートから情報を取得するためのコードと手順について説明していますが、手順は Office Open XML 形式をサポートする 3 つのどの 2007 Microsoft Office system プログラムでも同じです。

注意

このトピックのコード サンプルは、Microsoft Visual Basic® .NET および Microsoft Visual C#® で記述されており、Microsoft Visual Studio® 2008 で作成されたアドインで使用できます。Visual Studio 2008 でアドインを作成する方法の詳細については、「Open XML 形式 SDK 1.0 を使用して作業を開始する」を参照してください。

Office Open XML パッケージからワークシート情報を取得する

以下のコードでは、SpreadsheetDocument ドキュメント パッケージに含まれる指定されたブックにあるすべてのシートの名前と種類を含むリストを取得します。

' How to get worksheet information.
Public Function XLGetSheetInfo(ByVal fileName As String) As List(Of String)
    '  Fill this collection with a list of all the sheets.
    Dim sheets As List(Of String) = New List(Of String)
    Dim xlPackage As SpreadsheetDocument = SpreadsheetDocument.Open(fileName, false)
    Dim workbook As WorkbookPart = xlPackage.WorkbookPart
    Dim workbookstr As Stream = workbook.GetStream
    Dim doc As XmlDocument = New XmlDocument
    doc.Load(workbookstr)
    Dim nsManager As XmlNamespaceManager = New XmlNamespaceManager(doc.NameTable)
    nsManager.AddNamespace("default", doc.DocumentElement.NamespaceURI)
    Dim nodelist As XmlNodeList = doc.SelectNodes("//default:sheets/default:sheet", nsManager)
    For Each node As XmlNode In nodelist
        Dim sheetName As String = string.Empty
        sheetName = node.Attributes("name").Value
        sheets.Add(sheetName)
    Next
    Return sheets
End Function
// How to get worksheet information.
public List<string> XLGetSheetInfo(string fileName)
{
    //  Fill this collection with a list of all the sheets.
    List<string> sheets = new List<string>();

    using (SpreadsheetDocument xlPackage = SpreadsheetDocument.Open(fileName, false))
    {
        WorkbookPart workbook = xlPackage.WorkbookPart;
        Stream workbookstr = workbook.GetStream();
        XmlDocument doc = new XmlDocument();
        doc.Load(workbookstr);

        XmlNamespaceManager nsManager = new XmlNamespaceManager(doc.NameTable);
        nsManager.AddNamespace("default", doc.DocumentElement.NamespaceURI);
        XmlNodeList nodelist = doc.SelectNodes("//default:sheets/default:sheet", nsManager);

        foreach (XmlNode node in nodelist)
        {
            string sheetName = string.Empty;
            sheetName = node.Attributes["name"].Value;
            sheets.Add(sheetName);
        }
    }
    return sheets;
}

SpreadsheetDocument ドキュメント パッケージに含まれる指定されたブックにあるすべてのシートの名前と種類を含むリストを取得するには

  1. 最初に、ソース Excel 2007 ファイルのパスと名前を表すパラメータを渡します。

  2. 次に、ワークシート情報を格納する sheets という名前の List オブジェクトを作成します。

  3. 次に、SpreadsheetDocument パッケージの WorkbookPart パーツを、doc という名前の新しい XmlDocument ドキュメントに読み込みます。

  4. 次に、XPath 式および XmlNodeList オブジェクトを使用して、XmlDocument ドキュメントのすべての //default:sheets/default:sheet ノードを取得します。

  5. 次に、XmlNodeList オブジェクトの繰り返し処理を行い、シートの名前をシートのリストに追加します。

  6. 最後に、SpreadsheetDocument パッケージに格納されているすべてのワークシートの名前を含むシートのリストを返します。