Freigeben über


Abrufen einer Liste der ausgeblendeten Arbeitsblätter in einem Tabellenkalkulationsdokument

In diesem Thema wird gezeigt, wie Sie die Klassen im Open XML SDK für Office verwenden, um programmgesteuert eine Liste ausgeblendeter Arbeitsblätter in einer Microsoft Excel-Arbeitsmappe abzurufen, ohne das Dokument in Excel zu laden. Sie enthält eine Beispielmethode GetHiddenSheets zur Veranschaulichung dieser Aufgabe.

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, eine Zeichenfolge, die den Pfad der Datei angibt, die Sie untersuchen möchten. Die -Methode funktioniert mit der von Ihnen angegebenen Arbeitsmappe 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 Sheet Teile zurückgibt, werden alle benötigten Informationen von den Sheet Elementen innerhalb des Workbook XML-Inhalts bereitgestellt. Im folgenden Code wird die Descendants generische -Methode des Workbook -Objekts verwendet, 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 aufgezählten Wert .Hidden Sie können ein Arbeitsblatt auch sehr ausgeblendet machen, indem Sie Code (entweder in VBA oder in einer anderen Sprache) schreiben, der die Eigenschaft des Blatts Visible auf den enumerationierten Wert xlSheetVeryHiddenfestlegt. 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 der Wert entweder SheetStateValues.Hidden oder SheetStateValues.VeryHiddenist.

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

Beispielcode

Im Folgenden finden Sie das vollständige GetHiddenSheets Codebeispiel in C# und Visual Basic.

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;
}