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 2010 ou Microsoft Excel 2010, sans charger le document dans Excel. Elle présente également un exemple de méthode GetHiddenSheets pour illustrer cette tâche.

Méthode GetHiddenSheets

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

Récupérer la collection de feuilles de calcul

La classe WorkbookPart fournit une propriété Workbook , qui à son tour contient le contenu XML du classeur. Bien que le Kit de développement logiciel (SDK) Open XML fournisse la propriété Sheets , qui retourne une collection des parties Sheet , toutes les informations dont vous avez besoin sont fournies par les éléments Sheet dans le contenu XML du classeur . Le code suivant utilise la méthode générique Descendants de l’objet Workbook pour récupérer une collection d’objets Sheet qui contiennent des 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 propriété State de l’objet Sheet contient une valeur énumérée de Hidden. Vous pouvez également masquer une feuille de calcul en écrivant un code (en VBA ou dans un autre langage) qui définit la propriété Visible de la feuille à la valeur énumérée xlSheetVeryHidden. Pour les feuilles de calcul masquées de cette manière, la propriété State de l’objet Sheet contient la valeur énumérée VeryHidden.

Étant donné la collection qui contient des informations sur toutes les feuilles, le code suivant utilise la fonction Where pour filtrer la collection afin qu’elle contienne uniquement les feuilles dans lesquelles la propriété State n’a pas la valeur Null. Si la propriété State n’est pas null, le code recherche les objets Sheet dans lesquels la propriété State est une valeur et où la valeur est 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));

Exemple de code

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