Obter uma lista das folhas de cálculo ocultas num documento de folha de cálculo
Este tópico mostra como utilizar as classes no SDK Open XML para o Office para obter programaticamente uma lista de folhas de cálculo ocultas num livro do Microsoft Excel, sem carregar o documento para o Excel. Contém um método de exemplo GetHiddenSheets
para ilustrar esta tarefa.
GetHiddenSheets method (Método GetHiddenSheets)
Pode utilizar o GetHiddenSheets
método para obter uma lista das folhas de cálculo ocultas num livro. O GetHiddenSheets
método aceita um único parâmetro, uma cadeia que indica o caminho do ficheiro que pretende examinar. O método funciona com o livro que especificar, preenchendo uma List<T> instância com uma referência a cada objeto oculto Sheet
.
Obter a coleção de folhas de cálculo
A WorkbookPart
classe fornece uma Workbook
propriedade que, por sua vez, contém o conteúdo XML do livro. Embora o SDK Open XML forneça a Sheets
propriedade , que devolve uma coleção das Sheet
partes, todas as informações de que precisa são fornecidas pelos Sheet
elementos dentro do Workbook
conteúdo XML.
O código seguinte utiliza o Descendants
método genérico do Workbook
objeto para obter uma coleção de Sheet
objetos que contêm informações sobre todos os elementos subordinados da folha do conteúdo XML do livro.
WorkbookPart? wbPart = document.WorkbookPart;
if (wbPart is not null)
{
var sheets = wbPart.Workbook.Descendants<Sheet>();
Obter folhas ocultas
É importante ter em atenção que o Excel suporta dois níveis de folhas de cálculo. Pode ocultar uma folha de cálculo ao utilizar a interface de utilizador do Excel ao clicar com o botão direito do rato no separador folhas de cálculo e optar por ocultar a folha de cálculo.
Para estas folhas de cálculo, a State
propriedade do Sheet
objeto contém um valor enumerado de Hidden
. Também pode tornar uma folha de cálculo muito oculta ao escrever código (no VBA ou noutro idioma) que define a propriedade da Visible
folha para o valor xlSheetVeryHidden
enumerado . Para folhas de cálculo ocultas desta forma, a State
propriedade do Sheet
objeto contém o valor VeryHidden
enumerado .
Dada a coleção que contém informações sobre todas as folhas, o seguinte código utiliza a Where função para filtrar a coleção para que contenha apenas as folhas nas quais a State
propriedade não é nula. Se a State
propriedade não for nula, o código procura os Sheet
objetos em que a State
propriedade é um valor e onde o valor é SheetStateValues.Hidden
ou 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 exemplo
Segue-se o exemplo de código completo GetHiddenSheets
em C# e 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;
}