Compartilhar via


Recuperar uma lista das planilhas ocultas em um documento de planilha

Este tópico mostra como usar as classes no SDK Open XML para Office para recuperar programaticamente uma lista de planilhas ocultas em uma pasta de trabalho Microsoft Excel 2010 ou Microsoft Excel 2010, sem carregar o documento no Excel. Ele contém um método GetHiddenSheets de exemplo para ilustrar essa tarefa.

Método GetHiddenSheets

Você pode usar o método GetHiddenSheets para recuperar uma lista das planilhas ocultas em uma pasta de trabalho. O método GetHiddenSheets aceita um único parâmetro, uma cadeia de caracteres que indica o caminho do arquivo que você deseja examinar. O método funciona com a pasta de trabalho especificada, preenchendo uma instância da Lista<T> com uma referência a cada objeto Sheet oculto.

Recuperar a coleção de planilhas

A classe WorkbookPart fornece uma propriedade Workbook , que por sua vez contém o conteúdo XML da pasta de trabalho. Embora o SDK Open XML forneça a propriedade Sheets , que retorna uma coleção de partes da Planilha , todas as informações necessárias são fornecidas pelos elementos Sheet dentro do conteúdo XML da pasta de trabalho . O código a seguir usa o método genérico Descendentes do objeto Workbook para recuperar uma coleção de objetos Sheet que contêm informações sobre todos os elementos filho da planilha do conteúdo XML da pasta de trabalho.

WorkbookPart? wbPart = document.WorkbookPart;

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

Recuperar planilhas ocultas

É importante estar ciente de que o Excel dá suporte a dois níveis de planilhas. Você pode ocultar uma planilha usando a interface do usuário do Excel clicando com o botão direito do mouse na guia planilhas e optando por ocultar a planilha. Para essas planilhas, a propriedade State do objeto Sheet contém um valor enumerado de Hidden. Você também pode tornar uma planilha muito oculta escrevendo código (em VBA ou em outro idioma) que define a propriedade Visible da planilha como o valor enumerado xlSheetVeryHidden. Para planilhas ocultas dessa maneira, a propriedade State do objeto Sheet contém o valor enumerado VeryHidden.

Dada a coleção que contém informações sobre todas as planilhas, o código a seguir usa a função Where para filtrar a coleção para que ela contenha apenas as planilhas nas quais a propriedade State não é nula. Se a propriedade State não for nula, o código procurará os objetos Sheet nos quais a propriedade State como 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

A seguir está o exemplo completo de código GetHiddenSheets em C# e Visual Basic.

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System;
using System.Collections.Generic;
using System.Linq;

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