Compartilhar via


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 xlSheetVeryHiddenenumerado . Para folhas de cálculo ocultas desta forma, a State propriedade do Sheet objeto contém o valor VeryHiddenenumerado .

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;
}