Получение списка скрытых листов в документе электронной таблицы
В этом разделе показано, как использовать классы в пакете 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;
}