Freigeben über


Abrufen einer Liste der ausgeblendeten Arbeitsblätter in einem Tabellenkalkulationsdokument

In diesem Thema wird gezeigt, wie Sie mithilfe der Klassen im Open XML SDK für Office programmgesteuert eine Liste ausgeblendeter Arbeitsblätter in einer Microsoft Excel 2010 oder Microsoft Excel 2010 Arbeitsmappe abrufen, ohne das Dokument in Excel zu laden. Diese Aufgabe wird mithilfe eines Beispiels der GetHiddenSheets-Methode veranschaulicht.

GetHiddenSheets-Methode

Sie können die GetHiddenSheets-Methode verwenden, um eine Liste der ausgeblendeten Arbeitsblätter in einer Arbeitsmappe abzurufen. Die GetHiddenSheets-Methode akzeptiert einen einzelnen Parameter, nämlich eine Zeichenfolge, die den Pfad der zu untersuchenden Datei angibt. Die -Methode arbeitet mit der von Ihnen angegebenen Arbeitsmappe zusammen und füllt eine List<T-instance> mit einem Verweis auf jedes ausgeblendete Sheet-Objekt.

Abrufen der Auflistung von Arbeitsblättern

Die WorkbookPart-Klasse stellt eine Workbook-Eigenschaft bereit, die wiederum den XML-Inhalt der Arbeitsmappe enthält. Obwohl das Open XML SDK die Sheets-Eigenschaft bereitstellt, die eine Auflistung der Blattteile zurückgibt, werden alle benötigten Informationen von den Sheet-Elementen innerhalb des Arbeitsmappen-XML-Inhalts bereitgestellt. Der folgende Code verwendet die generische Methode Descendants des Workbook-Objekts , um eine Auflistung von Sheet-Objekten abzurufen, die Informationen zu allen untergeordneten Blattelementen des XML-Inhalts der Arbeitsmappe enthalten.

WorkbookPart? wbPart = document.WorkbookPart;

if (wbPart is not null)
{
    var sheets = wbPart.Workbook.Descendants<Sheet>();

Abrufen ausgeblendeter Blätter

Es ist wichtig zu beachten, dass Excel zwei Arbeitsblattebenen unterstützt. You can hide a worksheet by using the Excel user interface by right-clicking the worksheets tab and opting to hide the worksheet. Für diese Arbeitsblätter enthält die State-Eigenschaft des Sheet-Objekts den Aufzählungswert Hidden. You can also make a worksheet very hidden by writing code (either in VBA or in another language) that sets the sheet's Visible property to the enumerated value xlSheetVeryHidden. Bei Arbeitsblättern, die auf diese Weise ausgeblendet werden, enthält die State-Eigenschaft des Sheet-Objekts den aufgezählten Wert VeryHidden.

Angesichts der Auflistung, die Informationen zu allen Blättern enthält, verwendet der folgende Code die Where-Funktion , um die Auflistung so zu filtern, dass sie nur die Blätter enthält, in denen die State-Eigenschaft nicht NULL ist. Wenn die State-Eigenschaft nicht NULL ist, sucht der Code nach den Sheet-Objekten , in denen die State-Eigenschaft als Wert und wobei der Wert entweder SheetStateValues.Hidden oder SheetStateValues.VeryHidden ist.

var hiddenSheets = sheets.Where((item) => item.State is not null &&
    item.State.HasValue &&
    (item.State.Value == SheetStateValues.Hidden ||
    item.State.Value == SheetStateValues.VeryHidden));

Beispielcode

Es folgt das vollständige GetHiddenSheets-Codebeispiel in C# und Visual Basic.

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System;
using System.Collections.Generic;
using System.Linq;

static List<Sheet> GetHiddenSheets(string fileName)
{
    List<Sheet> returnVal = new List<Sheet>();

    using (SpreadsheetDocument document = SpreadsheetDocument.Open(fileName, false))
    {
        WorkbookPart? wbPart = document.WorkbookPart;

        if (wbPart is not null)
        {
            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 is not null &&
                item.State.HasValue &&
                (item.State.Value == SheetStateValues.Hidden ||
                item.State.Value == SheetStateValues.VeryHidden));

            returnVal = hiddenSheets.ToList();
        }
    }

    return returnVal;
}