Freigeben über


Abrufen eines Wörterbuchs aller benannten Bereiche in einem Tabellenkalkulationsdokument

In diesem Thema wird gezeigt, wie Sie die Klassen im Open XML SDK für Office verwenden, um programmgesteuert ein Wörterbuch abzurufen, das die Namen und Bereiche aller definierten Namen in einer Microsoft Excel 2010 oder Microsoft Excel 2013 Arbeitsmappe enthält. Sie enthält eine Beispielmethode GetDefinedNames , um diese Aufgabe zu veranschaulichen.

GetDefinedNames-Methode

Die GetDefinedNames-Methode akzeptiert einen einzelnen Parameter, der den Namen des Dokuments angibt, aus dem die definierten Namen abgerufen werden sollen. Die Methode gibt einen Dictionary-instance zurück, der Informationen zu den definierten Namen in der angegebenen Arbeitsmappe enthält, die möglicherweise leer sind, wenn keine definierten Namen vorhanden sind.

Funktionsweise des Codes

Der Code öffnet das Tabellenkalkulationsdokument mit der Open-Methode , die angibt, dass das Dokument für den schreibgeschützten Zugriff mit dem endgültigen False-Parameter geöffnet sein soll. Angesichts der geöffneten Arbeitsmappe verwendet der Code die WorkbookPart-Eigenschaft, um zum Standard Arbeitsmappenteils zu navigieren. Der Code speichert diesen Verweis in einer Variablen mit dem Namen wbPart.

// Open the spreadsheet document for read-only access.
using (SpreadsheetDocument document = SpreadsheetDocument.Open(fileName, false))
{
    // Retrieve a reference to the workbook part.
    var wbPart = document.WorkbookPart;

Abrufen der definierten Namen

Angesichts des Arbeitsmappenteils ist der nächste Schritt einfach. Der Code verwendet die Workbook-Eigenschaft des Arbeitsmappenteils, um einen Verweis auf den Inhalt der Arbeitsmappe abzurufen, und ruft dann die DefinedNames-Auflistung ab, die vom Open XML SDK bereitgestellt wird. Diese Eigenschaft gibt eine Auflistung aller definierten Namen zurück, die in der Arbeitsmappe enthalten sind. Wenn die Eigenschaft einen Nicht-NULL-Wert zurückgibt, durchläuft der Code die Auflistung, ruft Informationen zu jedem benannten Teil ab und fügt den Schlüsselnamen und den Wert (Bereichsbeschreibung) zum Wörterbuch für jeden definierten Namen hinzu.

// Retrieve a reference to the defined names collection.
DefinedNames? definedNames = wbPart?.Workbook?.DefinedNames;

// If there are defined names, add them to the dictionary.
if (definedNames is not null)
{
    foreach (DefinedName dn in definedNames)
    {
        if (dn?.Name?.Value is not null && dn?.Text is not null)
        {
            returnValue.Add(dn.Name.Value, dn.Text);
        }
    }
}

Beispielcode

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

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

static Dictionary<String, String>GetDefinedNames(String fileName)
{
    // Given a workbook name, return a dictionary of defined names.
    // The pairs include the range name and a string representing the range.
    var returnValue = new Dictionary<String, String>();

    // Open the spreadsheet document for read-only access.
    using (SpreadsheetDocument document = SpreadsheetDocument.Open(fileName, false))
    {
        // Retrieve a reference to the workbook part.
        var wbPart = document.WorkbookPart;


        // Retrieve a reference to the defined names collection.
        DefinedNames? definedNames = wbPart?.Workbook?.DefinedNames;

        // If there are defined names, add them to the dictionary.
        if (definedNames is not null)
        {
            foreach (DefinedName dn in definedNames)
            {
                if (dn?.Name?.Value is not null && dn?.Text is not null)
                {
                    returnValue.Add(dn.Name.Value, dn.Text);
                }
            }
        }

    }

    return returnValue;
}