Partager via


Récupérer une liste des feuilles de calcul masquées dans un document de feuille de calcul

Cette rubrique montre comment utiliser les classes du Kit de développement logiciel (SDK) Open XML pour Office afin de récupérer par programmation une liste de feuilles de calcul masquées dans un classeur Microsoft Excel, sans charger le document dans Excel. Il contient un exemple GetHiddenSheets de méthode pour illustrer cette tâche.

Méthode GetHiddenSheets

Vous pouvez utiliser la GetHiddenSheets méthode pour récupérer une liste des feuilles de calcul masquées dans un classeur. La GetHiddenSheets méthode accepte un paramètre unique, une chaîne qui indique le chemin du fichier que vous souhaitez examiner. La méthode fonctionne avec le classeur que vous spécifiez, en remplissant un List<T> instance avec une référence à chaque objet masquéSheet.

Récupérer la collection de feuilles de calcul

La WorkbookPart classe fournit une Workbook propriété, qui à son tour contient le contenu XML du classeur. Bien que le Kit de développement logiciel (SDK) Open XML fournisse la Sheets propriété , qui retourne une collection de Sheet composants, toutes les informations dont vous avez besoin sont fournies par les Sheet éléments du Workbook contenu XML. Le code suivant utilise la Descendants méthode générique de l’objet Workbook pour récupérer une collection d’objets qui contiennent des Sheet informations sur tous les éléments enfants de feuille du contenu XML du classeur.

WorkbookPart? wbPart = document.WorkbookPart;

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

Récupérer des feuilles masquées

Il est important de savoir qu’Excel prend en charge deux niveaux de feuilles de calcul. Vous pouvez masquer une feuille de calcul en utilisant l'interface utilisateur d'Excel en cliquant avec le bouton droit sur l'onglet des feuilles de calcul et en choisissant de masquer la feuille. Pour ces feuilles de calcul, la State propriété de l’objet Sheet contient une valeur énumérée de Hidden. Vous pouvez également rendre une feuille de calcul très masquée en écrivant du code (en VBA ou dans un autre langage) qui définit la propriété de Visible la feuille sur la valeur xlSheetVeryHiddenénumérée . Pour les feuilles de calcul masquées de cette manière, la State propriété de l’objet Sheet contient la valeur VeryHiddenénumérée .

Étant donné la collection qui contient des informations sur toutes les feuilles, le code suivant utilise la Where fonction pour filtrer la collection afin qu’elle contienne uniquement les feuilles dans lesquelles la State propriété n’est pas null. Si la State propriété n’est pas null, le code recherche les Sheet objets dans lesquels la State propriété est une valeur et où la valeur est ou SheetStateValues.HiddenSheetStateValues.VeryHidden.

var hiddenSheets = sheets.Where((item) => item.State is not null &&
    item.State.HasValue &&
    (item.State.Value == SheetStateValues.Hidden ||
    item.State.Value == SheetStateValues.VeryHidden));

Exemple de code

Voici l’exemple de code complet GetHiddenSheets en C# et 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;
}