Partager via


Obtenir des informations de feuille de calcul à partir d’un package Open XML

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 des informations à partir d’une feuille de calcul dans un document de feuille de calcul.

Structure de base d’un document spreadsheetML

La structure de base d’un document SpreadsheetML comprend les éléments Sheets et Sheet faisant référence aux feuilles de calcul dans le classeur. Un fichier XML distinct est créé pour chaque feuille de calcul. Par exemple, l’élément SpreadsheetML d’un élément Workbook qui contient deux feuilles de calcul nommées « MySheet1 » et « MySheet2 » se trouve dans le fichier Workbook.xml et apparaît dans l’exemple de code suivant.

    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
    <workbook xmlns=https://schemas.openxmlformats.org/spreadsheetml/2006/main xmlns:r="https://schemas.openxmlformats.org/officeDocument/2006/relationships">
        <sheets>
            <sheet name="MySheet1" sheetId="1" r:id="rId1" /> 
            <sheet name="MySheet2" sheetId="2" r:id="rId2" /> 
        </sheets>
    </workbook>

Les fichiers XML de feuille de calcul contiennent un ou plusieurs éléments de niveau bloc tels que sheetData représente la table de cellules et contient un ou plusieurs éléments Row . Un élément Row contient un ou plusieurs éléments Cell (cellule). Chaque cellule contient un élément CellValue qui représente la valeur de la cellule. Par exemple, le SpreadsheetML de la première feuille de calcul d'un classeur, qui possède uniquement la valeur 100 dans la cellule A1, se trouve dans le fichier Sheet1.xml et est illustré dans l'exemple de code suivant.

    <?xml version="1.0" encoding="UTF-8" ?> 
    <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
        <sheetData>
            <row r="1">
                <c r="A1">
                    <v>100</v> 
                </c>
            </row>
        </sheetData>
    </worksheet>

À l’aide du Kit de développement logiciel (SDK) Open XML, vous pouvez créer une structure de document et du contenu qui utilisent des classes fortement typées qui correspondent à des éléments SpreadsheetML . Vous pouvez trouver ces classes dans l'espace de noms DocumentFormat.OpenXML.Spreadsheet. La table suivante répertorie les noms des classes qui correspondent aux éléments workbook, sheets, sheet, worksheet et sheetData.

Élément SpreadsheetML Classe du Kit de développement logiciel (SDK) Open XML Description
workbook DocumentFormat.OpenXML.Spreadsheet.Workbook Élément racine du composant document principal.
sheets DocumentFormat.OpenXML.Spreadsheet.Sheets Conteneur des structures de niveau bloc comme les éléments de feuille, fileVersion et autres spécifiés par la norme ISO/IEC 29500.
sheet DocumentFormat.OpenXml.Spreadsheet.Sheet Feuille qui pointe vers un fichier de définition de feuille.
feuille de calcul Documentformat.openxml.spreadsheet. Feuilles de calcul Fichier de définition de feuille qui contient les données de feuille.
sheetData DocumentFormat.OpenXML.Spreadsheet.SheetData Tableau de cellules, regroupées par lignes.
row DocumentFormat.OpenXml.Spreadsheet.Row Ligne dans le tableau de cellules.
c DocumentFormat.OpenXml.Spreadsheet.Cell Cellule d'une ligne.
v DocumentFormat.OpenXml.Spreadsheet.CellValue Valeur d’une cellule.

Fonctionnement de l’exemple de code

Une fois que vous avez ouvert le fichier pour l’accès en lecture seule, vous instanciez la classe Sheets .

Sheets? sheets = mySpreadsheet.WorkbookPart?.Workbook?.Sheets;

Vous effectuez ensuite une itération dans la collection Sheets et affichez OpenXmlElement et OpenXmlAttribute dans chaque élément.

foreach (OpenXmlElement sheet in sheets)
{
    foreach (OpenXmlAttribute attr in sheet.GetAttributes())
    {
        Console.WriteLine("{0}: {1}", attr.LocalName, attr.Value);
    }
}

L’affichage des informations d’attribut vous permet d’obtenir le nom et l’ID de chaque feuille de calcul du fichier de tableur.

Exemple de code

Voici un exemple de code complet en C# et Visual Basic.

using DocumentFormat.OpenXml.Packaging;
using System;
using OpenXmlAttribute = DocumentFormat.OpenXml.OpenXmlAttribute;
using OpenXmlElement = DocumentFormat.OpenXml.OpenXmlElement;
using Sheets = DocumentFormat.OpenXml.Spreadsheet.Sheets;


static void GetSheetInfo(string fileName)
{
    // Open file as read-only.
    using (SpreadsheetDocument mySpreadsheet = SpreadsheetDocument.Open(fileName, false))
    {
        Sheets? sheets = mySpreadsheet.WorkbookPart?.Workbook?.Sheets;

        if (sheets is not null)
        {
            // For each sheet, display the sheet information.
            foreach (OpenXmlElement sheet in sheets)
            {
                foreach (OpenXmlAttribute attr in sheet.GetAttributes())
                {
                    Console.WriteLine("{0}: {1}", attr.LocalName, attr.Value);
                }
            }
        }
    }
}