Поделиться через


Получение списка скрытых листов в документе электронной таблицы

В этом разделе показано, как использовать классы в пакете SDK Open XML для Office для программного извлечения списка скрытых листов в книге Microsoft Excel без загрузки документа в Excel. Он содержит пример GetHiddenSheets метода для иллюстрации этой задачи.

Метод GetHiddenSheets

Вы можете использовать GetHiddenSheets метод , чтобы получить список скрытых листов в книге. Метод GetHiddenSheets принимает один параметр — строку, указывающую путь к файлу, который требуется изучить. Метод работает с указанной книгой, заполняя List<T> экземпляр ссылкой на каждый скрытый Sheet объект.

Получение коллекции листов

Класс WorkbookPart предоставляет Workbook свойство, которое, в свою очередь, содержит XML-содержимое книги. Хотя пакет SDK Open XML предоставляет Sheets свойство , которое возвращает коллекцию Sheet частей, все необходимые сведения предоставляются Sheet элементами в XML-содержимом Workbook . В следующем коде Descendants используется универсальный Workbook метод объекта для получения коллекции Sheet объектов, содержащих сведения обо всех дочерних элементах xml-содержимого книги.

WorkbookPart? wbPart = document.WorkbookPart;

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

Получение скрытых листов

Важно помнить, что Excel поддерживает два уровня листов. Лист можно скрыть с помощью пользовательского интерфейса Excel, щелкнув правой кнопкой мыши вкладку листа и выбрав команду скрытия листа. Для этих листов State свойство Sheet объекта содержит перечисленное значение Hidden. Вы также можете сделать лист очень скрытым, написав код (на VBA или на другом языке), который задает для свойства листа Visible перечисленное значение xlSheetVeryHidden. Для листов, скрытых таким образом, State свойство Sheet объекта содержит перечисленное значение VeryHidden.

Учитывая коллекцию, содержащую сведения обо всех листах, следующий код использует Where функцию для фильтрации коллекции, чтобы она содержала только листы, в которых State свойство не имеет значения NULL. State Если свойство не равно NULL, код ищет Sheet объекты, в которых State свойство является значением и где значение равно SheetStateValues.Hidden или SheetStateValues.VeryHidden.

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

Пример кода

Ниже приведен полный GetHiddenSheets пример кода на C# и 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;
}