Passer au contenu du pied de page
OUTILS PPT
Comment utiliser C# pour créer une présentation PowerPoint

Comment créer et automatiser des présentations PowerPoint par programmation en C#

Créer manuellement la même présentation PowerPoint semaine après semaine est une tâche fastidieuse et sujette aux erreurs qu'aucun développeur n'apprécie. Qu'il s'agisse de générer des rapports de vente hebdomadaires, des synthèses financières mensuelles ou des propositions personnalisées pour les clients, le processus est mûr pour l'automatisation. Pendant des années, la solution de référence dans le monde .NET était Microsoft Office Interop, une technologie permettant un contrôle programmatique des applications Office. Cependant, cette approche présente des inconvénients importants : elle nécessite l'installation d'une version sous licence de Microsoft Office sur le serveur, elle est notoirement instable dans les environnements serveur et elle exclut totalement les déploiements modernes et multiplateformes sur Linux, macOS ou dans des conteneurs Docker.

Heureusement, il existe une meilleure solution. Ce tutoriel vous montrera comment créer par programmation des présentations PowerPoint en C# à l'aide d'IronPPT pour .NET, une bibliothèque puissante et légère conçue pour le développement moderne. Nous verrons comment automatiser toutes les étapes, de la création d'un simple diaporama à la génération de présentations complexes et basées sur les données à partir de modèles, avec tableaux et graphiques. Avec IronPPT, vous pouvez créer des flux de travail d'automatisation de présentations rapides, évolutifs et fiables, fonctionnant partout et sans aucune dépendance à Microsoft Office.

! IronPPT - Bibliothèque de présentations C# La bibliothèque IronPPT pour .NET permet aux développeurs de créer et de gérer par programmation des fichiers PowerPoint en C#.

Comment débuter la génération de présentations PowerPoint en C# ?

Démarrer avec l'automatisation PowerPoint en C# est simple. IronPPT pour .NET est distribué sous forme de package NuGet, qui peut être installé directement dans votre projet Visual Studio en quelques secondes.

Étape 1 : Installez la bibliothèque IronPPT

Ouvrez la console du gestionnaire de packages dans Visual Studio ( Tools > NuGet Package Manager > Package Manager Console ) et saisissez la commande suivante :

Install-Package IronPPT

Vous pouvez également rechercher " IronPPT " dans l'interface graphique du gestionnaire de packages NuGet et l'installer à partir de là.

Installation d'IronPPT via l'écran du gestionnaire de packages NuGet Le gestionnaire de packages NuGet dans Visual Studio, montrant l'installation de la bibliothèque IronPPT.

Étape 2 : Créez et enregistrez votre première présentation

Une fois la bibliothèque installée, vous pouvez créer votre première présentation PowerPoint avec seulement quelques lignes de code C#. La classe de base pour toute présentation est PresentationDocument .

L'extrait de code suivant initialise une nouvelle présentation, ajoute une seule diapositive avec un titre et l'enregistre au format .pptx .

using IronPPT;

// Before using IronPPT, a license key is required.
// Get a free 30-day trial key at: https://ironsoftware.com/csharp/ppt/licensing/#trial-license
License.LicenseKey = "YOUR-LICENSE-KEY";

// Create a new PowerPoint presentation document
var presentation = new PresentationDocument();

// Create a new slide object
var slide = new Slide();

// Add text to the slide, which will be placed in a default textbox
slide.AddText("Hello, World! Welcome to Programmatic PowerPoint Creation.");

// Add the slide to the presentation
presentation.AddSlide(slide);

// Save the presentation to a.pptx file
presentation.Save("MyFirstPresentation.pptx");
using IronPPT;

// Before using IronPPT, a license key is required.
// Get a free 30-day trial key at: https://ironsoftware.com/csharp/ppt/licensing/#trial-license
License.LicenseKey = "YOUR-LICENSE-KEY";

// Create a new PowerPoint presentation document
var presentation = new PresentationDocument();

// Create a new slide object
var slide = new Slide();

// Add text to the slide, which will be placed in a default textbox
slide.AddText("Hello, World! Welcome to Programmatic PowerPoint Creation.");

// Add the slide to the presentation
presentation.AddSlide(slide);

// Save the presentation to a.pptx file
presentation.Save("MyFirstPresentation.pptx");
Imports IronPPT

' Before using IronPPT, a license key is required.
' Get a free 30-day trial key at: https://ironsoftware.com/csharp/ppt/licensing/#trial-license
License.LicenseKey = "YOUR-LICENSE-KEY"

' Create a new PowerPoint presentation document
Dim presentation = New PresentationDocument()

' Create a new slide object
Dim slide As New Slide()

' Add text to the slide, which will be placed in a default textbox
slide.AddText("Hello, World! Welcome to Programmatic PowerPoint Creation.")

' Add the slide to the presentation
presentation.AddSlide(slide)

' Save the presentation to a.pptx file
presentation.Save("MyFirstPresentation.pptx")
$vbLabelText   $csharpLabel

Après avoir exécuté ce code, vous trouverez un nouveau fichier nommé MyFirstPresentation.pptx dans le répertoire de sortie de votre projet. En l'ouvrant, vous découvrirez une seule diapositive contenant le texte que vous avez ajouté. Ce simple exemple illustre le flux de travail fondamental consistant à créer un objet de présentation, à y ajouter du contenu et à enregistrer le fichier.

Présentation vierge créée avec IronPPT Une présentation PowerPoint vierge créée par programmation avec C# et IronPPT.

Comment puis-je ajouter et manipuler des diapositives par programmation ?

Une présentation est un ensemble de diapositives. IronPPT fournit une API simple et intuitive pour gérer ces diapositives, vous permettant de les ajouter, de les charger et de les réutiliser selon les besoins de votre application.

Charger une présentation existante et ajouter des diapositives

Souvent, vous devrez modifier une présentation existante plutôt que d'en créer une de toutes pièces. Vous pouvez charger un fichier .pptx depuis le disque en passant son chemin d'accès au constructeur PresentationDocument . Une fois chargées, vous pouvez facilement ajouter de nouvelles diapositives.

L'exemple suivant charge la présentation que nous avons créée précédemment et y ajoute une nouvelle diapositive vierge.

using IronPPT;

// Load an existing PowerPoint presentation
var presentation = new PresentationDocument("MyFirstPresentation.pptx");

// Add a new blank slide to the end of the presentation
presentation.AddSlide();

// Save the modified presentation
presentation.Save("PresentationWithTwoSlides.pptx");
using IronPPT;

// Load an existing PowerPoint presentation
var presentation = new PresentationDocument("MyFirstPresentation.pptx");

// Add a new blank slide to the end of the presentation
presentation.AddSlide();

// Save the modified presentation
presentation.Save("PresentationWithTwoSlides.pptx");
Imports IronPPT

' Load an existing PowerPoint presentation
Private presentation = New PresentationDocument("MyFirstPresentation.pptx")

' Add a new blank slide to the end of the presentation
presentation.AddSlide()

' Save the modified presentation
presentation.Save("PresentationWithTwoSlides.pptx")
$vbLabelText   $csharpLabel

Cette fonctionnalité est particulièrement utile pour les applications qui ajoutent des informations au fil du temps, comme les systèmes de journalisation ou de rapports d'état.

Deux diapositives vierges ! La même présentation, avec une deuxième diapositive vierge ajoutée via du code C#.

using IronPPT;
using IronPPT.Models;

// Loading an existing presentation file
var ppt = new PresentationDocument("output.pptx");

// Add an additional slide
ppt.AddSlide();

// Save the updated presentation
ppt.Save("output.pptx");
using IronPPT;
using IronPPT.Models;

// Loading an existing presentation file
var ppt = new PresentationDocument("output.pptx");

// Add an additional slide
ppt.AddSlide();

// Save the updated presentation
ppt.Save("output.pptx");
Imports IronPPT
Imports IronPPT.Models

' Loading an existing presentation file
Private ppt = New PresentationDocument("output.pptx")

' Add an additional slide
ppt.AddSlide()

' Save the updated presentation
ppt.Save("output.pptx")
$vbLabelText   $csharpLabel

Clonage de diapositives pour des mises en page cohérentes

Dans de nombreux contextes professionnels, comme la génération de rapports ou de propositions, vous avez besoin de plusieurs diapositives partageant la même mise en page, le même arrière-plan et les mêmes éléments de marque tels que les logos ou les pieds de page. Créer manuellement chacune de ces diapositives en codant serait répétitif et difficile à maintenir.

Une approche plus efficace consiste à créer une diapositive " modèle " dans votre présentation, puis à la cloner par programmation. Bien qu'IronPPT ne propose pas de méthode Clone() directe dans son API publique, il est possible de dupliquer une diapositive en créant une nouvelle diapositive et en copiant les propriétés et éléments souhaités depuis la diapositive modèle. Une approche plus directe, souvent utilisée avec les modèles, consiste à pré-concevoir les diapositives puis à les remplir de données ; nous aborderons cette méthode dans la section consacrée aux données. Pour l'instant, cela démontre un concept puissant pour maintenir la cohérence de la conception de vos présentations générées, une fonctionnalité également présente dans d'autres bibliothèques comme Syncfusion.

Quelle est la meilleure façon d'ajouter du contenu riche aux diapositives ?

Une fois vos diapositives prêtes, l'étape suivante consiste à les remplir de contenu pertinent. IronPPT offre un modèle objet riche pour l'ajout et la mise en forme de texte, l'insertion d'images et le dessin de formes.

Travailler avec du texte, des polices et des paragraphes

Le texte est l'élément le plus courant dans toute présentation. Dans IronPPT, le texte est géré par une hiérarchie d'objets : Shape (faisant office de zone de texte), Paragraph et Text . Cette structure offre un contrôle précis du positionnement et du style.

Développons notre présentation à deux diapositives en ajoutant un titre stylisé à la première diapositive et une liste à puces à la seconde.

using IronPPT;
using IronPPT.Enums;
using System.Drawing;

// Load the presentation with two slides
var presentation = new PresentationDocument("PresentationWithTwoSlides.pptx");

// --- Modify the First Slide ---
Slide firstSlide = presentation.Slides;

// Clear existing text if any
firstSlide.ClearText();

// Add a title to the first slide. By default, AddText creates a textbox.
// For more control, we can create a Shape and add text to it.
Shape titleShape = firstSlide.AddShape(ShapeType.Rectangle, new Rectangle(50, 50, 860, 100));
titleShape.Fill.SetSolid(new Color("#003B5C")); // A dark blue background
Paragraph titleParagraph = titleShape.AddParagraph("Welcome to IronPPT");
titleParagraph.DefaultTextStyle.SetFont("Arial", 44).SetColor(Color.White).SetBold(true);
titleParagraph.Style.SetAlignment(TextAlignmentTypeValues.Center);

// --- Modify the Second Slide ---
Slide secondSlide = presentation.Slides;
secondSlide.AddText("Key Features", new Rectangle(50, 30, 860, 70))
   .DefaultTextStyle.SetFont("Calibri", 36).SetBold(true);

// Create a shape to act as a textbox for our bulleted list
Shape listShape = secondSlide.AddShape(ShapeType.Rectangle, new Rectangle(70, 120, 800, 300));

// Add a bulleted list
listShape.AddParagraph("Create presentations programmatically").Style.SetBullet(BulletType.Numeric);
listShape.AddParagraph("Add text, images, and shapes").Style.SetBullet(BulletType.Numeric);
listShape.AddParagraph("Style content with fonts, colors, and alignment").Style.SetBullet(BulletType.Numeric);
listShape.AddParagraph("Generate data-driven reports from templates").Style.SetBullet(BulletType.Numeric);

// Style all paragraphs in the list shape
foreach (var para in listShape.Paragraphs)
{
    para.DefaultTextStyle.SetFont("Arial", 28);
    para.Style.SetIndentation(30); // Indent the list
}

// Save the final presentation
presentation.Save("PresentationWithRichContent.pptx");
using IronPPT;
using IronPPT.Enums;
using System.Drawing;

// Load the presentation with two slides
var presentation = new PresentationDocument("PresentationWithTwoSlides.pptx");

// --- Modify the First Slide ---
Slide firstSlide = presentation.Slides;

// Clear existing text if any
firstSlide.ClearText();

// Add a title to the first slide. By default, AddText creates a textbox.
// For more control, we can create a Shape and add text to it.
Shape titleShape = firstSlide.AddShape(ShapeType.Rectangle, new Rectangle(50, 50, 860, 100));
titleShape.Fill.SetSolid(new Color("#003B5C")); // A dark blue background
Paragraph titleParagraph = titleShape.AddParagraph("Welcome to IronPPT");
titleParagraph.DefaultTextStyle.SetFont("Arial", 44).SetColor(Color.White).SetBold(true);
titleParagraph.Style.SetAlignment(TextAlignmentTypeValues.Center);

// --- Modify the Second Slide ---
Slide secondSlide = presentation.Slides;
secondSlide.AddText("Key Features", new Rectangle(50, 30, 860, 70))
   .DefaultTextStyle.SetFont("Calibri", 36).SetBold(true);

// Create a shape to act as a textbox for our bulleted list
Shape listShape = secondSlide.AddShape(ShapeType.Rectangle, new Rectangle(70, 120, 800, 300));

// Add a bulleted list
listShape.AddParagraph("Create presentations programmatically").Style.SetBullet(BulletType.Numeric);
listShape.AddParagraph("Add text, images, and shapes").Style.SetBullet(BulletType.Numeric);
listShape.AddParagraph("Style content with fonts, colors, and alignment").Style.SetBullet(BulletType.Numeric);
listShape.AddParagraph("Generate data-driven reports from templates").Style.SetBullet(BulletType.Numeric);

// Style all paragraphs in the list shape
foreach (var para in listShape.Paragraphs)
{
    para.DefaultTextStyle.SetFont("Arial", 28);
    para.Style.SetIndentation(30); // Indent the list
}

// Save the final presentation
presentation.Save("PresentationWithRichContent.pptx");
Imports IronPPT
Imports IronPPT.Enums
Imports System.Drawing

' Load the presentation with two slides
Private presentation = New PresentationDocument("PresentationWithTwoSlides.pptx")

' --- Modify the First Slide ---
Private firstSlide As Slide = presentation.Slides

' Clear existing text if any
firstSlide.ClearText()

' Add a title to the first slide. By default, AddText creates a textbox.
' For more control, we can create a Shape and add text to it.
Dim titleShape As Shape = firstSlide.AddShape(ShapeType.Rectangle, New Rectangle(50, 50, 860, 100))
titleShape.Fill.SetSolid(New Color("#003B5C")) ' A dark blue background
Dim titleParagraph As Paragraph = titleShape.AddParagraph("Welcome to IronPPT")
titleParagraph.DefaultTextStyle.SetFont("Arial", 44).SetColor(Color.White).SetBold(True)
titleParagraph.Style.SetAlignment(TextAlignmentTypeValues.Center)

' --- Modify the Second Slide ---
Dim secondSlide As Slide = presentation.Slides
secondSlide.AddText("Key Features", New Rectangle(50, 30, 860, 70)).DefaultTextStyle.SetFont("Calibri", 36).SetBold(True)

' Create a shape to act as a textbox for our bulleted list
Dim listShape As Shape = secondSlide.AddShape(ShapeType.Rectangle, New Rectangle(70, 120, 800, 300))

' Add a bulleted list
listShape.AddParagraph("Create presentations programmatically").Style.SetBullet(BulletType.Numeric)
listShape.AddParagraph("Add text, images, and shapes").Style.SetBullet(BulletType.Numeric)
listShape.AddParagraph("Style content with fonts, colors, and alignment").Style.SetBullet(BulletType.Numeric)
listShape.AddParagraph("Generate data-driven reports from templates").Style.SetBullet(BulletType.Numeric)

' Style all paragraphs in the list shape
For Each para In listShape.Paragraphs
	para.DefaultTextStyle.SetFont("Arial", 28)
	para.Style.SetIndentation(30) ' Indent the list
Next para

' Save the final presentation
presentation.Save("PresentationWithRichContent.pptx")
$vbLabelText   $csharpLabel

Cet exemple illustre plusieurs concepts clés :

  • Formes comme zones de texte : Nous créons une Shape de type Rectangle qui servira de conteneur pour notre texte. Cela nous permet de contrôler précisément sa position et sa taille.
  • Paragraphes : Le contenu textuel est ajouté via des objets Paragraph .
  • Style : La propriété DefaultTextStyle d'un Paragraph permet une mise en forme fluide de la police, de la taille, de la couleur et de l'épaisseur. La propriété Style contrôle la mise en forme au niveau du paragraphe, comme l'alignement et les puces.

! Ajout de texte et de zones de texte La première diapositive comporte désormais un titre stylisé, et la deuxième diapositive contient une liste à puces.

Insertion et positionnement des images

Les éléments visuels tels que les logos, les graphiques et les images de produits sont essentiels pour des présentations attrayantes. IronPPT facilite l'ajout d'images à partir d'un fichier ou d'un flux mémoire.

Le code suivant ajoute le logo d'Iron Software dans le coin inférieur droit de notre diapositive de titre.

using IronPPT;
using System.Drawing;

var presentation = new PresentationDocument("PresentationWithRichContent.pptx");
Slide firstSlide = presentation.Slides;

// Load an image from a file
Image logo = new Image("iron_logo.png");

// Add the image to the slide and set its properties
var addedImage = firstSlide.AddImage(logo);
addedImage.Position = new Point(750, 450);
addedImage.Width = 150;
addedImage.Height = 75;

presentation.Save("PresentationWithImage.pptx");
using IronPPT;
using System.Drawing;

var presentation = new PresentationDocument("PresentationWithRichContent.pptx");
Slide firstSlide = presentation.Slides;

// Load an image from a file
Image logo = new Image("iron_logo.png");

// Add the image to the slide and set its properties
var addedImage = firstSlide.AddImage(logo);
addedImage.Position = new Point(750, 450);
addedImage.Width = 150;
addedImage.Height = 75;

presentation.Save("PresentationWithImage.pptx");
Imports IronPPT
Imports System.Drawing

Private presentation = New PresentationDocument("PresentationWithRichContent.pptx")
Private firstSlide As Slide = presentation.Slides

' Load an image from a file
Private logo As New Image("iron_logo.png")

' Add the image to the slide and set its properties
Private addedImage = firstSlide.AddImage(logo)
addedImage.Position = New Point(750, 450)
addedImage.Width = 150
addedImage.Height = 75

presentation.Save("PresentationWithImage.pptx")
$vbLabelText   $csharpLabel

La méthode AddImage renvoie un objet Image qui vous permet de manipuler davantage sa Position , Width , Height et sa rotation ( Angle ) après son ajout à la diapositive.

! Ajout d'une image à la première diapositive La diapositive de titre comprend désormais une image positionnée dans le coin inférieur droit.

Dessiner et personnaliser des formes

Au-delà des rectangles utilisés pour les zones de texte, IronPPT peut dessiner une variété de formes pour ajouter une structure visuelle et mettre en valeur vos diapositives. Vous pouvez contrôler leur géométrie, leurs couleurs et leur position.

Ajoutons une forme décorative à notre deuxième diapositive pour séparer visuellement le contenu.

using IronPPT;
using IronPPT.Enums;
using System.Drawing;

var presentation = new PresentationDocument("PresentationWithImage.pptx");
Slide secondSlide = presentation.Slides;

// Add a circle shape to the second slide
Shape circle = secondSlide.AddShape(ShapeType.Ellipse, new Rectangle(400, 250, 200, 200));
circle.Name = "DecorativeCircle";

// Customize the shape's appearance
circle.Fill.SetSolid(new Color("#E0F7FA")); // A light cyan color
circle.Outline.SetColor(new Color("#00796B")).SetWidth(3); // A teal outline

presentation.Save("PresentationWithShapes.pptx");
using IronPPT;
using IronPPT.Enums;
using System.Drawing;

var presentation = new PresentationDocument("PresentationWithImage.pptx");
Slide secondSlide = presentation.Slides;

// Add a circle shape to the second slide
Shape circle = secondSlide.AddShape(ShapeType.Ellipse, new Rectangle(400, 250, 200, 200));
circle.Name = "DecorativeCircle";

// Customize the shape's appearance
circle.Fill.SetSolid(new Color("#E0F7FA")); // A light cyan color
circle.Outline.SetColor(new Color("#00796B")).SetWidth(3); // A teal outline

presentation.Save("PresentationWithShapes.pptx");
Imports IronPPT
Imports IronPPT.Enums
Imports System.Drawing

Private presentation = New PresentationDocument("PresentationWithImage.pptx")
Private secondSlide As Slide = presentation.Slides

' Add a circle shape to the second slide
Private circle As Shape = secondSlide.AddShape(ShapeType.Ellipse, New Rectangle(400, 250, 200, 200))
circle.Name = "DecorativeCircle"

' Customize the shape's appearance
circle.Fill.SetSolid(New Color("#E0F7FA")) ' A light cyan color
circle.Outline.SetColor(New Color("#00796B")).SetWidth(3) ' A teal outline

presentation.Save("PresentationWithShapes.pptx")
$vbLabelText   $csharpLabel

Ce code ajoute un cercle rempli de cyan clair et bordé de turquoise. La possibilité d'ajouter et de styliser des formes par programmation est précieuse pour créer des diagrammes personnalisés, des organigrammes ou simplement améliorer la conception visuelle de vos présentations automatisées.

Un cercle stylisé ! La deuxième diapositive comporte désormais un cercle stylisé, ajouté via du code C#.

Comment créer des présentations basées sur les données ?

La véritable puissance de l'automatisation PowerPoint réside dans la génération de présentations à partir de sources de données dynamiques. C'est là qu'IronPPT excelle, vous permettant de créer des systèmes de reporting sophistiqués capables de générer des tableaux, des graphiques et de remplir des modèles à la volée. Cette capacité la distingue des bibliothèques de base et la positionne comme un concurrent sérieux face à des outils tels qu'Aspose et Syncfusion, qui mettent également en avant des fonctionnalités axées sur les données.

Utilisation de modèles pour les rapports dynamiques

L'un des flux de travail les plus efficaces consiste à créer un modèle PowerPoint principal avec des mises en page prédéfinies et du texte d'espace réservé. Votre application C# peut ensuite charger ce modèle et remplacer les espaces réservés par des données provenant d'une base de données, d'une API ou de toute autre source.

Étape 1 : Créer un modèle PowerPoint

Commencez par créer un fichier PowerPoint nommé ReportTemplate.pptx . Sur une diapositive, ajoutez des zones de texte avec des chaînes de caractères uniques, telles que {{ClientName}} , {{ReportDate}} et {{TotalSales}} .

Étape 2 : Remplir le modèle en C

Le code suivant montre comment charger ce modèle, définir des données, puis parcourir les formes de la diapositive pour effectuer un remplacement de texte.

using IronPPT;
using System.Collections.Generic;

// --- Sample Data ---
var reportData = new Dictionary<string, string>
{
    { "{{ClientName}}", "Global Tech Inc." },
    { "{{ReportDate}}", System.DateTime.Now.ToShortDateString() },
    { "{{TotalSales}}", "$1,250,000" },
    { "{{PreparedBy}}", "Automated Reporting System" }
};

// Load the presentation template
var presentation = new PresentationDocument("ReportTemplate.pptx");
Slide reportSlide = presentation.Slides;

// Iterate through all shapes on the slide to find and replace text
foreach (var shape in reportSlide.Shapes)
{
    // Iterate through all paragraphs within the shape
    foreach (var paragraph in shape.Paragraphs)
    {
        // Iterate through all text runs in the paragraph
        foreach (var textRun in paragraph.Texts)
        {
            foreach (var kvp in reportData)
            {
                if (textRun.Value.Contains(kvp.Key))
                - textRun.ReplaceText(kvp.Key, kvp.Value);
            }
        }
    }
}

// Save the generated report
presentation.Save("GeneratedClientReport.pptx");
using IronPPT;
using System.Collections.Generic;

// --- Sample Data ---
var reportData = new Dictionary<string, string>
{
    { "{{ClientName}}", "Global Tech Inc." },
    { "{{ReportDate}}", System.DateTime.Now.ToShortDateString() },
    { "{{TotalSales}}", "$1,250,000" },
    { "{{PreparedBy}}", "Automated Reporting System" }
};

// Load the presentation template
var presentation = new PresentationDocument("ReportTemplate.pptx");
Slide reportSlide = presentation.Slides;

// Iterate through all shapes on the slide to find and replace text
foreach (var shape in reportSlide.Shapes)
{
    // Iterate through all paragraphs within the shape
    foreach (var paragraph in shape.Paragraphs)
    {
        // Iterate through all text runs in the paragraph
        foreach (var textRun in paragraph.Texts)
        {
            foreach (var kvp in reportData)
            {
                if (textRun.Value.Contains(kvp.Key))
                - textRun.ReplaceText(kvp.Key, kvp.Value);
            }
        }
    }
}

// Save the generated report
presentation.Save("GeneratedClientReport.pptx");
Imports System
Imports IronPPT
Imports System.Collections.Generic

' --- Sample Data ---
Private reportData = New Dictionary(Of String, String) From {
	{"{{ClientName}}", "Global Tech Inc."},
	{"{{ReportDate}}", DateTime.Now.ToShortDateString()},
	{"{{TotalSales}}", "$1,250,000"},
	{"{{PreparedBy}}", "Automated Reporting System"}
}

' Load the presentation template
Private presentation = New PresentationDocument("ReportTemplate.pptx")
Private reportSlide As Slide = presentation.Slides

' Iterate through all shapes on the slide to find and replace text
For Each shape In reportSlide.Shapes
	' Iterate through all paragraphs within the shape
	For Each paragraph In shape.Paragraphs
		' Iterate through all text runs in the paragraph
		For Each textRun In paragraph.Texts
			For Each kvp In reportData
				If textRun.Value.Contains(kvp.Key) Then
				- textRun.ReplaceText(kvp.Key, kvp.Value)
				End If
			Next kvp
		Next textRun
	Next paragraph
Next shape

' Save the generated report
presentation.Save("GeneratedClientReport.pptx")
$vbLabelText   $csharpLabel

Cette approche basée sur des modèles est incroyablement puissante. Il sépare la conception des données, permettant aux concepteurs de modifier l'apparence du modèle dans PowerPoint sans nécessiter de modifications du code.

Générer des tableaux à partir de collections de données

L'affichage des données sous forme de tableaux est une exigence fondamentale pour la plupart des rapports d'entreprise. IronPPT vous permet de créer et de remplir des tableaux par programmation directement à partir de vos structures de données C#, telles qu'une List .

Supposons que nous ayons une classe Product simple et une liste de produits. Le code suivant générera une nouvelle diapositive contenant un tableau affichant ces données.

// --- Sample Data Model and Collection ---
public class Product
{
    public int ID { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public int StockLevel { get; set; }
}

var products = new List<Product>
{
    new Product { ID = 101, Name = "Quantum CPU", Price = 299.99m, StockLevel = 50 },
    new Product { ID = 205, Name = "Photon SSD", Price = 149.50m, StockLevel = 120 },
    new Product { ID = 310, Name = "Gravity GPU", Price = 799.00m, StockLevel = 25 }
};

// --- Table Generation ---
var presentation = new PresentationDocument();
var tableSlide = presentation.AddSlide();
tableSlide.AddText("Product Inventory Report", new Rectangle(50, 20, 860, 50))
   .DefaultTextStyle.SetFont("Arial", 32).SetBold(true);

// Add a table to the slide with 4 columns and (N+1) rows
Table productTable = tableSlide.AddTable(products.Count + 1, 4, new Rectangle(50, 100, 860, 300));

// --- Populate Header Row ---
productTable.Rows.Cells.TextBody.AddParagraph("Product ID");
productTable.Rows.Cells.TextBody.AddParagraph("Product Name");
productTable.Rows.Cells.TextBody.AddParagraph("Price");
productTable.Rows.Cells.TextBody.AddParagraph("Stock");

// Style the header row
foreach (var cell in productTable.Rows.Cells)
{
    cell.Fill.SetSolid(new Color("#4A5568")); // Dark Gray
    cell.TextBody.Paragraphs.DefaultTextStyle.SetColor(Color.White).SetBold(true);
    cell.TextBody.Paragraphs.Style.SetAlignment(TextAlignmentTypeValues.Center);
}

// --- Populate Data Rows ---
for (int i = 0; i < products.Count; i++)
{
    var product = products[i];
    productTable.Rows[i + 1].Cells.TextBody.AddParagraph(product.ID.ToString());
    productTable.Rows[i + 1].Cells.TextBody.AddParagraph(product.Name);
    productTable.Rows[i + 1].Cells.TextBody.AddParagraph(product.Price.ToString("C"));
    productTable.Rows[i + 1].Cells.TextBody.AddParagraph(product.StockLevel.ToString());
}

presentation.Save("ProductInventoryReport.pptx");
// --- Sample Data Model and Collection ---
public class Product
{
    public int ID { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public int StockLevel { get; set; }
}

var products = new List<Product>
{
    new Product { ID = 101, Name = "Quantum CPU", Price = 299.99m, StockLevel = 50 },
    new Product { ID = 205, Name = "Photon SSD", Price = 149.50m, StockLevel = 120 },
    new Product { ID = 310, Name = "Gravity GPU", Price = 799.00m, StockLevel = 25 }
};

// --- Table Generation ---
var presentation = new PresentationDocument();
var tableSlide = presentation.AddSlide();
tableSlide.AddText("Product Inventory Report", new Rectangle(50, 20, 860, 50))
   .DefaultTextStyle.SetFont("Arial", 32).SetBold(true);

// Add a table to the slide with 4 columns and (N+1) rows
Table productTable = tableSlide.AddTable(products.Count + 1, 4, new Rectangle(50, 100, 860, 300));

// --- Populate Header Row ---
productTable.Rows.Cells.TextBody.AddParagraph("Product ID");
productTable.Rows.Cells.TextBody.AddParagraph("Product Name");
productTable.Rows.Cells.TextBody.AddParagraph("Price");
productTable.Rows.Cells.TextBody.AddParagraph("Stock");

// Style the header row
foreach (var cell in productTable.Rows.Cells)
{
    cell.Fill.SetSolid(new Color("#4A5568")); // Dark Gray
    cell.TextBody.Paragraphs.DefaultTextStyle.SetColor(Color.White).SetBold(true);
    cell.TextBody.Paragraphs.Style.SetAlignment(TextAlignmentTypeValues.Center);
}

// --- Populate Data Rows ---
for (int i = 0; i < products.Count; i++)
{
    var product = products[i];
    productTable.Rows[i + 1].Cells.TextBody.AddParagraph(product.ID.ToString());
    productTable.Rows[i + 1].Cells.TextBody.AddParagraph(product.Name);
    productTable.Rows[i + 1].Cells.TextBody.AddParagraph(product.Price.ToString("C"));
    productTable.Rows[i + 1].Cells.TextBody.AddParagraph(product.StockLevel.ToString());
}

presentation.Save("ProductInventoryReport.pptx");
' --- Sample Data Model and Collection ---
Public Class Product
	Public Property ID() As Integer
	Public Property Name() As String
	Public Property Price() As Decimal
	Public Property StockLevel() As Integer
End Class

Private products = New List(Of Product) From {
	New Product With {
		.ID = 101,
		.Name = "Quantum CPU",
		.Price = 299.99D,
		.StockLevel = 50
	},
	New Product With {
		.ID = 205,
		.Name = "Photon SSD",
		.Price = 149.50D,
		.StockLevel = 120
	},
	New Product With {
		.ID = 310,
		.Name = "Gravity GPU",
		.Price = 799.00D,
		.StockLevel = 25
	}
}

' --- Table Generation ---
Private presentation = New PresentationDocument()
Private tableSlide = presentation.AddSlide()
tableSlide.AddText("Product Inventory Report", New Rectangle(50, 20, 860, 50)).DefaultTextStyle.SetFont("Arial", 32).SetBold(True)

' Add a table to the slide with 4 columns and (N+1) rows
Dim productTable As Table = tableSlide.AddTable(products.Count + 1, 4, New Rectangle(50, 100, 860, 300))

' --- Populate Header Row ---
productTable.Rows.Cells.TextBody.AddParagraph("Product ID")
productTable.Rows.Cells.TextBody.AddParagraph("Product Name")
productTable.Rows.Cells.TextBody.AddParagraph("Price")
productTable.Rows.Cells.TextBody.AddParagraph("Stock")

' Style the header row
For Each cell In productTable.Rows.Cells
	cell.Fill.SetSolid(New Color("#4A5568")) ' Dark Gray
	cell.TextBody.Paragraphs.DefaultTextStyle.SetColor(Color.White).SetBold(True)
	cell.TextBody.Paragraphs.Style.SetAlignment(TextAlignmentTypeValues.Center)
Next cell

' --- Populate Data Rows ---
For i As Integer = 0 To products.Count - 1
	Dim product = products(i)
	productTable.Rows(i + 1).Cells.TextBody.AddParagraph(product.ID.ToString())
	productTable.Rows(i + 1).Cells.TextBody.AddParagraph(product.Name)
	productTable.Rows(i + 1).Cells.TextBody.AddParagraph(product.Price.ToString("C"))
	productTable.Rows(i + 1).Cells.TextBody.AddParagraph(product.StockLevel.ToString())
Next i

presentation.Save("ProductInventoryReport.pptx")
$vbLabelText   $csharpLabel

Ajout de graphiques pour visualiser les données

Pour rendre les données plus digestes, les graphiques sont essentiels. IronPPT permet d'ajouter et de remplir différents types de graphiques pour visualiser efficacement vos données.

Cet exemple crée un graphique à barres pour visualiser les niveaux de stock de notre liste de produits.

using IronPPT.Charts;
using IronPPT.Enums;

// --- Chart Generation ---
var presentation = new PresentationDocument();
var chartSlide = presentation.AddSlide();
chartSlide.AddText("Product Stock Levels", new Rectangle(50, 20, 860, 50))
   .DefaultTextStyle.SetFont("Arial", 32).SetBold(true);

// Add a bar chart to the slide
Chart stockChart = chartSlide.AddChart(ChartType.Bar, new Rectangle(100, 100, 750, 450));
stockChart.Title.Text = "Current Inventory";

// Get the chart data object to populate it
ChartData chartData = stockChart.ChartData;
chartData.Categories.Clear(); // Clear default categories
chartData.Series.Clear();     // Clear default series

// Add a series for our stock data
var series = chartData.Series.Add("Stock Level");

// Populate categories (product names) and data points (stock levels)
foreach (var product in products)
{
    chartData.Categories.Add(product.Name);
    series.DataPoints.Add(product.StockLevel);
}

presentation.Save("ProductStockChart.pptx");
using IronPPT.Charts;
using IronPPT.Enums;

// --- Chart Generation ---
var presentation = new PresentationDocument();
var chartSlide = presentation.AddSlide();
chartSlide.AddText("Product Stock Levels", new Rectangle(50, 20, 860, 50))
   .DefaultTextStyle.SetFont("Arial", 32).SetBold(true);

// Add a bar chart to the slide
Chart stockChart = chartSlide.AddChart(ChartType.Bar, new Rectangle(100, 100, 750, 450));
stockChart.Title.Text = "Current Inventory";

// Get the chart data object to populate it
ChartData chartData = stockChart.ChartData;
chartData.Categories.Clear(); // Clear default categories
chartData.Series.Clear();     // Clear default series

// Add a series for our stock data
var series = chartData.Series.Add("Stock Level");

// Populate categories (product names) and data points (stock levels)
foreach (var product in products)
{
    chartData.Categories.Add(product.Name);
    series.DataPoints.Add(product.StockLevel);
}

presentation.Save("ProductStockChart.pptx");
Imports IronPPT.Charts
Imports IronPPT.Enums

' --- Chart Generation ---
Private presentation = New PresentationDocument()
Private chartSlide = presentation.AddSlide()
chartSlide.AddText("Product Stock Levels", New Rectangle(50, 20, 860, 50)).DefaultTextStyle.SetFont("Arial", 32).SetBold(True)

' Add a bar chart to the slide
Dim stockChart As Chart = chartSlide.AddChart(ChartType.Bar, New Rectangle(100, 100, 750, 450))
stockChart.Title.Text = "Current Inventory"

' Get the chart data object to populate it
Dim chartData As ChartData = stockChart.ChartData
chartData.Categories.Clear() ' Clear default categories
chartData.Series.Clear() ' Clear default series

' Add a series for our stock data
Dim series = chartData.Series.Add("Stock Level")

' Populate categories (product names) and data points (stock levels)
For Each product In products
	chartData.Categories.Add(product.Name)
	series.DataPoints.Add(product.StockLevel)
Next product

presentation.Save("ProductStockChart.pptx")
$vbLabelText   $csharpLabel

Ce code génère un graphique à barres d'aspect professionnel, alimenté dynamiquement à partir de vos objets C#, offrant une représentation visuelle claire de vos données sans aucune intervention manuelle.

Pourquoi choisir une bibliothèque dédiée plutôt qu'une solution d'interopérabilité bureautique ?

Pour les développeurs qui envisagent la création de présentations PowerPoint par programmation, le choix se résume souvent à utiliser Microsoft Office Interop ou une bibliothèque tierce dédiée comme IronPPT. Bien qu'Interop soit " gratuit " si vous possédez une licence Office, il n'a pas été conçu pour répondre aux exigences des applications modernes côté serveur. Le tableau suivant récapitule les principales différences.

Caractéristique / Considération IronPPT pour .NET Microsoft.Office.Interop.PowerPoint
Dépendance côté serveur Aucune. Bibliothèque .NET 100 % gérée. Nécessite l'installation de Microsoft Office sur le serveur.
Performances et évolutivité Optimisé pour une utilisation multithread et haute performance. Non conçu pour une utilisation côté serveur ; peut être lent et instable.
Complexité du déploiement Installation simple du package NuGet. Dépendances COM complexes, autorisations et licences Office.
Support de la plateforme Windows, Linux, macOS, Docker, Azure, AWS. Windows uniquement. Ne convient pas aux déploiements multiplateformes modernes.
Conception et facilité d'utilisation de l'API Une API moderne, intuitive et fluide, conçue pour les développeurs. API COM plus ancienne, verbeuse et complexe.
Stability Stable et fiable pour une exécution sans surveillance. Sujet aux blocages de processus et aux fuites de mémoire dans les environnements serveur.

Choisir une bibliothèque dédiée comme IronPPT se traduit par un développement plus rapide, une plus grande stabilité, des coûts de maintenance réduits et la flexibilité de déployer sur n'importe quelle plateforme. C'est un investissement dans une architecture robuste et moderne qui évite la dette technique et les limitations de l'interopérabilité. Choisir une bibliothèque dédiée comme IronPPT se traduit par un développement plus rapide, une plus grande stabilité, des coûts de maintenance réduits et la flexibilité d'un déploiement sur n'importe quelle plateforme. C'est un investissement dans une architecture robuste et moderne qui évite la dette technique et les limitations de l'interopérabilité.

Meilleures pratiques pour l'automatisation de PowerPoint en entreprise

Lors de la création d'applications de qualité professionnelle, le respect des bonnes pratiques garantit un code efficace, maintenable et résilient.

  1. Optimiser les performances pour les présentations volumineuses : Pour les présentations comportant de nombreuses diapositives ou de grandes images, tenez compte de l'utilisation de la mémoire. Chargez les images à partir de flux lorsque cela est possible et réutilisez des objets comme TextStyle ou ParagraphStyle au lieu de créer de nouvelles instances pour chaque élément.
  2. Maintenir une conception cohérente : Utilisez des modèles et des méthodes d'assistance pour garantir la cohérence de la conception. Créez une classe statique avec des méthodes qui renvoient des objets TextStyle et ParagraphStyle préconfigurés pour les en-têtes, le corps du texte et les légendes. Cela garantit la cohérence de la marque et simplifie les changements de style à l'échelle mondiale.
  3. Gérer les erreurs et les exceptions avec élégance : les entrées/sorties de fichiers et les dépendances externes peuvent échouer. Enveloppez toujours votre logique de génération de présentation dans des blocs try-catch pour gérer les exceptions potentielles telles que FileNotFoundException ou les erreurs d'autorisation d'accès.

Voici un exemple simple de gestion robuste des erreurs lors de l'enregistrement d'un fichier :

try
{
    // All presentation creation logic here...
    var presentation = new PresentationDocument();
    presentation.AddSlide().AddText("Final Report");

    // Attempt to save the presentation
    presentation.Save("C:\\ProtectedFolder\\FinalReport.pptx");
}
catch (System.IO.IOException ex)
{
    // Log the specific I/O error
    Console.WriteLine($"Error saving file: {ex.Message}");
    // Potentially try saving to a fallback location
}
catch (System.UnauthorizedAccessException ex)
{
    // Log the permission error
    Console.WriteLine($"Permission denied. Cannot save file. {ex.Message}");
}
catch (Exception ex)
{
    // Catch any other unexpected errors
    Console.WriteLine($"An unexpected error occurred: {ex.Message}");
}
try
{
    // All presentation creation logic here...
    var presentation = new PresentationDocument();
    presentation.AddSlide().AddText("Final Report");

    // Attempt to save the presentation
    presentation.Save("C:\\ProtectedFolder\\FinalReport.pptx");
}
catch (System.IO.IOException ex)
{
    // Log the specific I/O error
    Console.WriteLine($"Error saving file: {ex.Message}");
    // Potentially try saving to a fallback location
}
catch (System.UnauthorizedAccessException ex)
{
    // Log the permission error
    Console.WriteLine($"Permission denied. Cannot save file. {ex.Message}");
}
catch (Exception ex)
{
    // Catch any other unexpected errors
    Console.WriteLine($"An unexpected error occurred: {ex.Message}");
}
Try
	' All presentation creation logic here...
	Dim presentation = New PresentationDocument()
	presentation.AddSlide().AddText("Final Report")

	' Attempt to save the presentation
	presentation.Save("C:\ProtectedFolder\FinalReport.pptx")
Catch ex As System.IO.IOException
	' Log the specific I/O error
	Console.WriteLine($"Error saving file: {ex.Message}")
	' Potentially try saving to a fallback location
Catch ex As System.UnauthorizedAccessException
	' Log the permission error
	Console.WriteLine($"Permission denied. Cannot save file. {ex.Message}")
Catch ex As Exception
	' Catch any other unexpected errors
	Console.WriteLine($"An unexpected error occurred: {ex.Message}")
End Try
$vbLabelText   $csharpLabel

Conclusion et prochaines étapes

L'automatisation de la création de présentations PowerPoint en C# offre un gain de productivité significatif et permet de nouvelles fonctionnalités puissantes pour l'application. Comme nous l'avons vu, IronPPT pour .NET offre une solution intuitive, moderne et multiplateforme qui surpasse de loin les capacités et la stabilité des méthodes d'interopérabilité Office traditionnelles. De la création de diapositives simples à la conception de rapports complexes basés sur les données, avec des tableaux et des graphiques, IronPPT vous fournit les outils nécessaires pour accomplir votre travail efficacement.

Si vos projets impliquent également de travailler avec d'autres formats de documents, envisagez d'explorer la suite Iron complète. Avec des bibliothèques comme IronPDF pour la manipulation de fichiers PDF, IronXL pour les feuilles de calcul Excel et IronBarcode pour la lecture des codes-barres, vous pouvez gérer tous vos besoins en matière de traitement de documents avec un ensemble d'outils cohérent et de haute qualité.

Prêt à automatiser ? Le meilleur moyen de découvrir toute la puissance d'IronPPT est de l'essayer dans votre propre projet.

Commencez avec IronPPT maintenant.
green arrow pointer

Pour plus d'informations, vous pouvez consulter la documentation officielle d'IronPPT ou explorer en détail les classes et les méthodes dans la référence de l'API .

Veuillez noterAspose est une marque déposée de son propriétaire respectif. Ce site n'est pas affilié à, approuvé par ou sponsorisé par Aspose. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont faites à titre d'information uniquement et reflètent les informations publiquement disponibles au moment de la rédaction.

Questions Fréquemment Posées

Comment puis-je automatiser les présentations PowerPoint en C#?

Vous pouvez utiliser IronPPT pour .NET pour automatiser les présentations PowerPoint. Cette bibliothèque vous permet de créer, modifier et manipuler des diapositives de manière programmatique sans compter sur Microsoft Office Interop.

Quels sont les avantages d'utiliser une bibliothèque .NET plutôt que Microsoft Office Interop pour l'automatisation de PowerPoint?

L'utilisation d'une bibliothèque .NET comme IronPPT offre stabilité, compatibilité multiplateforme, et élimine le besoin d'une installation sous licence de Microsoft Office, ce qui la rend idéale pour les environnements serveur et conteneur.

Comment puis-je ajouter une nouvelle diapositive à une présentation PowerPoint en utilisant C#?

Avec IronPPT, vous pouvez ajouter une nouvelle diapositive en utilisant la méthode AddSlide() après avoir initialisé votre présentation avec new PresentationDocument().

Puis-je cloner des diapositives existantes dans une présentation PowerPoint de manière programmatique?

Oui, IronPPT permet de cloner des diapositives en accédant à la collection Slides et en utilisant des méthodes pour dupliquer le contenu des diapositives efficacement.

Comment puis-je insérer du texte stylisé dans une diapositive PowerPoint en utilisant C#?

IronPPT fournit des méthodes comme AddText() et des options de style de texte telles que SetFont() et SetColor() pour insérer et formater du texte sur des diapositives.

Quel est le processus pour ajouter des images à une diapositive PowerPoint en C#?

Vous pouvez charger une image en utilisant new Image(), puis l'ajouter à votre diapositive avec slide.AddImage(), en définissant sa position et sa taille de manière programmatique.

Comment utiliser des modèles pour créer des présentations PowerPoint axées sur les données?

IronPPT prend en charge le chargement de modèles avec des espaces réservés, que vous pouvez remplacer par des données dynamiques en utilisant des méthodes comme ReplaceText() pour générer des rapports automatiquement.

Quelles sont les meilleures pratiques pour la gestion des erreurs dans l'automatisation PowerPoint avec C#?

Enveloppez votre code d'automatisation avec des blocs try-catch pour gérer les exceptions telles que IOException et UnauthorizedAccessException. La journalisation des erreurs peut aider au débogage et à garantir une automatisation robuste.

Comment puis-je créer des tableaux dans des diapositives PowerPoint en utilisant des données provenant de collections C#?

Utilisez la méthode AddTable() d'IronPPT pour créer des tableaux, puis remplissez-les avec des données provenant de collections C#, en personnalisant l'apparence de chaque cellule via TextBody.Paragraphs.DefaultTextStyle.

IronPPT est-il adapté au développement de solutions d'automatisation PowerPoint multiplateformes?

Oui, IronPPT fonctionne sur diverses plates-formes, y compris Windows, Linux et macOS, et prend en charge le déploiement dans des conteneurs Docker, ce qui le rend idéal pour les applications multiplateformes.

Jacob Mellor, Directeur technique @ Team Iron
Directeur technique

Jacob Mellor est directeur technique chez Iron Software et un ingénieur visionnaire pionnier dans la technologie des PDF en C#. En tant que développeur original derrière la base de code principale d'Iron Software, il a façonné l'architecture du produit de l'entreprise depuis sa création, ...

Lire la suite