次の方法で共有


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

このトピックでは、Open XML SDK for Office のクラスを使用して、スプレッドシート ドキュメント内のワークシートからプログラムによって情報を取得する方法について説明します。

spreadsheetML ドキュメントの基本的な構造

SpreadsheetMLドキュメントの基本的なドキュメント構造は、ブック内のワークシートを参照するSheets要素とSheet要素で構成されます。 ワークシートごとに、それぞれの XML ファイルが作成されます。 たとえば、MySheet1 と MySheet2 という名前の 2 つのワークシートがあるWorkbookSpreadsheetMLは、Workbook.xml ファイルにあり、次のコード例に示されています。

    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
    <workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
        <sheets>
            <sheet name="MySheet1" sheetId="1" r:id="rId1" /> 
            <sheet name="MySheet2" sheetId="2" r:id="rId2" /> 
        </sheets>
    </workbook>

ワークシート XML ファイルには、セル テーブルを表 SheetData 1 つ以上のブロック レベル要素が含まれており、1 つ以上の Row 要素が含まれています。 rowには、1 つ以上のCell要素が含まれています。 各セルには、セルの値を表す CellValue 要素が含まれています。 たとえば、セル A1 の値が 100 しかないブックの最初のワークシートの SpreadsheetML は、Sheet1.xml ファイルにあり、次のコード例に示されています。

    <?xml version="1.0" encoding="UTF-8" ?> 
    <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
        <sheetData>
            <row r="1">
                <c r="A1">
                    <v>100</v> 
                </c>
            </row>
        </sheetData>
    </worksheet>

Open XML SDK を使用すると、 SpreadsheetML 要素に対応する厳密に型指定されたクラスを使用するドキュメント構造とコンテンツを作成できます。 これらのクラスは、 DocumentFormat.OpenXML.Spreadsheet 名前空間にあります。 次の表に、 workbooksheetssheetworksheetsheetData の各要素に対応するクラスのクラス名を示します。

SpreadsheetML の要素 Open XML SDK クラス 説明
<workbook/> DocumentFormat.OpenXML.Spreadsheet.Workbook メイン ドキュメント パーツのルート要素。
<sheets/> DocumentFormat.OpenXML.Spreadsheet.Sheets ISO/IEC 29500 の仕様で規定されている、シート、ファイル バージョン、その他のブロック レベル構造のコンテナー。
<sheet/> DocumentFormat.OpenXml.Spreadsheet.Sheet シート定義ファイルを指し示すシート。
<worksheet/> DocumentFormat.OpenXML.Spreadsheet。 Worksheet シート データが含まれているシート定義ファイル。
<sheetData/> DocumentFormat.OpenXML.Spreadsheet.SheetData セルの表。行ごとにグループ化されています。
<row/> DocumentFormat.OpenXml.Spreadsheet.Row セルの表内の行。
<c/> DocumentFormat.OpenXml.Spreadsheet.Cell 行内のセル。
<v/> DocumentFormat.OpenXml.Spreadsheet.CellValue セルの値。

サンプル コードの動作のしくみ

読み取り専用アクセス用にファイルを開いた後、 Sheets クラスをインスタンス化します。

Sheets? sheets = mySpreadsheet.WorkbookPart?.Workbook?.Sheets;

次に、 Sheets コレクションを反復処理し、各要素に OpenXmlElementOpenXmlAttribute を表示します。

foreach (OpenXmlElement sheet in sheets)
{
    foreach (OpenXmlAttribute attr in sheet.GetAttributes())
    {
        Console.WriteLine("{0}: {1}", attr.LocalName, attr.Value);
    }
}

属性情報を表示することで、スプレッドシート ファイルの各ワークシートの名前と ID を取得します。

サンプル コード

以下に、C# と Visual Basic の両方の完全なサンプル コードを示します。

static void GetSheetInfo(string fileName)
{
    // Open file as read-only.
    using (SpreadsheetDocument mySpreadsheet = SpreadsheetDocument.Open(fileName, false))
    {
        Sheets? sheets = mySpreadsheet.WorkbookPart?.Workbook?.Sheets;

        if (sheets is not null)
        {
            // For each sheet, display the sheet information.
            foreach (OpenXmlElement sheet in sheets)
            {
                foreach (OpenXmlAttribute attr in sheet.GetAttributes())
                {
                    Console.WriteLine("{0}: {1}", attr.LocalName, attr.Value);
                }
            }
        }
    }
}