Partager via


Insérer une nouvelle feuille de calcul 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 d’insérer une nouvelle feuille de calcul dans un document de feuille de calcul par programmation.

Obtenir un objet SpreadsheetDocument

Dans le Kit de développement logiciel (SDK) Open XML, la SpreadsheetDocument classe représente un package de documents Excel. Pour ouvrir et utiliser un document Excel, vous créez un instance de la SpreadsheetDocument classe à partir du document. Une fois cette instance créée, vous pouvez accéder à la partie principale du classeur qui contient les feuilles de calcul. Le texte du document est représenté dans le package au format XML à l’aide d’un SpreadsheetML balisage.

Pour créer la classe instance à partir du document que vous appelez l’une Open des méthodes . Il vous en est proposé plusieurs, chacune avec une signature différente. L’exemple de code dans cette rubrique utilise la méthode Open(String, Boolean) avec une signature qui nécessite deux paramètres. Le premier paramètre accepte une chaîne de chemin d’accès complet qui représente le document à ouvrir. Le deuxième paramètre est ou truefalse et indique si vous souhaitez ouvrir le fichier pour modification. Les modifications que vous apportez au document ne seront pas enregistrées si ce paramètre est false.

Le code qui appelle la Open méthode est affiché dans l’instruction suivante using .

// Open the document for editing.
using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true))

Structure de base d’un document spreadsheetML

La structure de base d’un SpreadsheetML document se compose des Sheets éléments et Sheet , qui font référence aux feuilles de calcul du classeur. Un fichier XML distinct est créé pour chaque feuille de calcul. Par exemple, le SpreadsheetML pour un Workbook qui a deux feuilles de calcul nommées MySheet1 et MySheet2 se trouve dans le fichier Workbook.xml et est illustré dans l’exemple de code suivant.

    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
    <workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://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 Row éléments. Un row contient un ou plusieurs Cell éléments. Chaque cellule contient un CellValue élément qui représente la valeur de la cellule. Par exemple, le SpreadsheetML pour la première feuille de calcul d’un classeur, qui n’a que 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 un contenu qui utilisent des classes fortement typées qui correspondent à SpreadsheetML des éléments. Vous trouverez ces classes dans l’espace de DocumentFormat.OpenXML.Spreadsheet noms . Le tableau suivant répertorie les noms de classes des classes qui correspondent aux workbookéléments , sheets, sheet, worksheetet 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.
<worksheet/> 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.

Exemple de code

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

static void InsertWorksheet(string docName)
{
    // Open the document for editing.
    using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true))
    {
        WorkbookPart workbookPart = spreadSheet.WorkbookPart ?? spreadSheet.AddWorkbookPart();
        // Add a blank WorksheetPart.
        WorksheetPart newWorksheetPart = workbookPart.AddNewPart<WorksheetPart>();
        newWorksheetPart.Worksheet = new Worksheet(new SheetData());

        Sheets sheets = workbookPart.Workbook.GetFirstChild<Sheets>() ?? workbookPart.Workbook.AppendChild(new Sheets());
        string relationshipId = workbookPart.GetIdOfPart(newWorksheetPart);

        // Get a unique ID for the new worksheet.
        uint sheetId = 1;
        if (sheets.Elements<Sheet>().Count() > 0)
        {
            sheetId = (sheets.Elements<Sheet>().Select(s => s.SheetId?.Value).Max() + 1) ?? (uint)sheets.Elements<Sheet>().Count() + 1;
        }

        // Give the new worksheet a name.
        string sheetName = "Sheet" + sheetId;

        // Append the new worksheet and associate it with the workbook.
        Sheet sheet = new Sheet() { Id = relationshipId, SheetId = sheetId, Name = sheetName };
        sheets.Append(sheet);
    }
}

Voir aussi

Informations de référence sur la bibliothèque de classes du Kit de développement logiciel (SDK) Open XML