Recuperar una lista de las hojas de cálculo ocultas en un documento de hoja de cálculo
En este tema se muestra cómo usar las clases del SDK de Open XML para Office para recuperar mediante programación una lista de hojas de cálculo ocultas en un libro de Microsoft Excel, sin cargar el documento en Excel. Contiene un método de ejemplo GetHiddenSheets
para ilustrar esta tarea.
Método GetHiddenSheets
Puede usar el GetHiddenSheets
método para recuperar una lista de las hojas de cálculo ocultas de un libro. El GetHiddenSheets
método acepta un único parámetro, una cadena que indica la ruta de acceso del archivo que desea examinar. El método funciona con el libro que especifique, rellenando una List<T> instancia con una referencia a cada objeto oculto Sheet
.
Recuperar la colección de hojas de cálculo
La WorkbookPart
clase proporciona una Workbook
propiedad, que a su vez contiene el contenido XML del libro. Aunque el SDK de Open XML proporciona la Sheets
propiedad , que devuelve una colección de los Sheet
elementos, toda la información que necesita la proporcionan los Sheet
elementos del Workbook
contenido XML.
El código siguiente usa el Descendants
método genérico del Workbook
objeto para recuperar una colección de Sheet
objetos que contienen información sobre todos los elementos secundarios de hoja del contenido XML del libro.
WorkbookPart? wbPart = document.WorkbookPart;
if (wbPart is not null)
{
var sheets = wbPart.Workbook.Descendants<Sheet>();
Recuperar hojas ocultas
Es importante tener en cuenta que Excel admite dos niveles de hojas de cálculo. Puede ocultar una hoja de cálculo mediante la interfaz de usuario de Excel haciendo clic con el botón secundario en la pestaña de hojas de cálculo y seleccionando la opción de ocultar la hoja de cálculo.
Para estas hojas de cálculo, la State
propiedad del Sheet
objeto contiene un valor enumerado de Hidden
. También puede hacer que una hoja de cálculo esté muy oculta escribiendo código (ya sea en VBA o en otro idioma) que establezca la propiedad de Visible
la hoja en el valor xlSheetVeryHidden
enumerado. Para las hojas de cálculo ocultas de esta manera, la State
propiedad del Sheet
objeto contiene el valor VeryHidden
enumerado .
Dada la colección que contiene información sobre todas las hojas, el código siguiente usa la Where función para filtrar la colección de modo que contenga solo las hojas en las que la State
propiedad no es null. Si la State
propiedad no es null, el código busca los objetos en los Sheet
que la State
propiedad es un valor y donde el valor es o 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));
Código de ejemplo
A continuación se muestra el ejemplo de código completo GetHiddenSheets
en C# y 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;
}