Получение словаря всех именованных диапазонов в документе электронной таблицы
В этом разделе показано, как использовать классы в пакете SDK Open XML для Office для программного извлечения словаря, содержащего имена и диапазоны всех определенных имен в книге Microsoft Excel. Он содержит пример метода GetDefinedNames для иллюстрации этой задачи.
Метод GetDefinedNames
Метод GetDefinedNames принимает один параметр, указывающий имя документа, из которого извлекаются определенные имена. Метод возвращает Dictionary<TKey,TValue> экземпляр, содержащий сведения об определенных именах в указанной книге, которые могут быть пустыми, если нет определенных имен.
Принципы работы кода
Код открывает документ электронной таблицы с помощью метода Open , указывающего, что документ должен быть открыт для доступа только для чтения с окончательным параметром false. Учитывая открытую книгу, код использует свойство WorkbookPart для перехода к части книги main. Код сохраняет эту ссылку в переменной с именем 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;
Получение определенных имен
С учетом части книги следующий шаг прост. Код использует свойство Workbook части книги для получения ссылки на содержимое книги, а затем извлекает коллекцию DefinedNames , предоставляемую пакетом SDK Open XML. Это свойство возвращает коллекцию всех определенных имен, содержащихся в книге. Если свойство возвращает значение, отличное от NULL, код затем выполняет итерацию по коллекции, извлекая сведения о каждой именованной части и добавляя имя ключа) и значение (описание диапазона) в словарь для каждого определенного имени.
// 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);
}
}
}
Пример кода
Ниже приведен полный пример кода GetDefinedNames в C# и Visual Basic.
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;
}