Passer au contenu du pied de page
COMPARAISONS DE PRODUITS

Application Interop C# Microsoft Office Alternatives C# en utilisant IronPPT

Lors de la création d'applications .NET qui fonctionnent avec des fichiers de présentation PowerPoint, les développeurs se tournent généralement vers l'une des deux approches : l'[Interop PowerPoint de Microsoft Office](https://learn.microsoft.com/en-us/previous-versions/office/office-12/ff761925(v=office.12), ou une bibliothèque .NET moderne comme IronPPT.

Bien que les deux options permettent de manipuler les diapositives PowerPoint , les différences en termes d'ergonomie, de performances et d'évolutivité sont considérables. Si vous avez déjà rencontré des difficultés pour installer Microsoft Office sur un serveur ou si vous avez été confronté à des erreurs COM obscures lors du déploiement, vous apprécierez les avantages d'IronPPT.

Dans ce guide, nous allons passer en revue une comparaison détaillée des deux approches, présenter des cas d'utilisation concrets et démontrer comment IronPPT vous offre tout ce que fait l'interopérabilité, sans aucun inconvénient.

Qu'est-ce que Microsoft Office Interop PowerPoint ?

Application d'interopérabilité Microsoft Office en C# : Alternatives à IronPPT : Figure 1 - Page NuGet Microsoft Office Interop PowerPoint

L'interopérabilité Microsoft Office pour PowerPoint fait partie de la suite Microsoft Office Interop, un ensemble d'API basées sur COM qui permettent aux applications C# d'interagir avec des applications Office telles que PowerPoint, Word et Excel. Son fonctionnement repose sur le lancement d'une instance invisible de PowerPoint en arrière-plan et sa manipulation via du code.

Bien que fonctionnelle, l'interopérabilité présente de sérieuses limitations :

Principales limitations de Microsoft Interop PowerPoint

  • Nécessite l'installation de Microsoft Office : l'interopérabilité requiert l'installation physique de PowerPoint sur la machine hôte. Ceci constitue un obstacle majeur pour les applications web, les systèmes cloud et les conteneurs Docker.
  • Windows uniquement : Il ne fonctionne que sous Windows. Aucune prise en charge de Linux ou macOS.
  • Mauvaise compatibilité côté serveur : L'exécution d'Interop dans des services en arrière-plan, des pipelines CI/CD ou des serveurs Web est peu fiable et entraîne souvent des erreurs comme HRESULT : 0x800706B5.
  • Non thread-safe : les objets COM ne sont pas intrinsèquement thread-safe, ce qui rend la concurrence délicate.
  • Déploiement difficile : Le déploiement d'une application autonome devient difficile car l'installation d'Office est une dépendance d'exécution.
  • Gestion des erreurs plus complexe : les erreurs renvoyées par COM InterOp sont souvent vagues et difficiles à déboguer.

Voici un exemple de la complexité que peut atteindre l'interopérabilité :

using PowerPoint = Microsoft.Office.Interop.PowerPoint;
var app = new PowerPoint.Application();
// Create a new presentation
var presentation = app.Presentations.Add(MsoTriState.msoTrue);
// Add a slide to the presentation
var slide = presentation.Slides.Add(1, PowerPoint.PpSlideLayout.ppLayoutText);
// Add some text to the slide
slide.Shapes[1].TextFrame.TextRange.Text = "Hello from Interop!";
// Save the presentation to a file
presentation.SaveAs(@"C:\TestInterop.pptx");
// Close the presentation and quit the application
presentation.Close();
app.Quit();
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
var app = new PowerPoint.Application();
// Create a new presentation
var presentation = app.Presentations.Add(MsoTriState.msoTrue);
// Add a slide to the presentation
var slide = presentation.Slides.Add(1, PowerPoint.PpSlideLayout.ppLayoutText);
// Add some text to the slide
slide.Shapes[1].TextFrame.TextRange.Text = "Hello from Interop!";
// Save the presentation to a file
presentation.SaveAs(@"C:\TestInterop.pptx");
// Close the presentation and quit the application
presentation.Close();
app.Quit();
Imports PowerPoint = Microsoft.Office.Interop.PowerPoint
Private app = New PowerPoint.Application()
' Create a new presentation
Private presentation = app.Presentations.Add(MsoTriState.msoTrue)
' Add a slide to the presentation
Private slide = presentation.Slides.Add(1, PowerPoint.PpSlideLayout.ppLayoutText)
' Add some text to the slide
Private slide.Shapes(1).TextFrame.TextRange.Text = "Hello from Interop!"
' Save the presentation to a file
presentation.SaveAs("C:\TestInterop.pptx")
' Close the presentation and quit the application
presentation.Close()
app.Quit()
$vbLabelText   $csharpLabel

Sur le papier, cela semble parfait. Mais en production, il faut s'assurer que PowerPoint est installé, gérer les licences Office, administrer les ressources manuellement et espérer qu'aucun dysfonctionnement ne survienne dans les environnements sans interface graphique.

Présentation d'IronPPT : une alternative moderne et puissante

IronPPT est une puissante bibliothèque .NET qui vous permet de créer, lire, modifier et convertir des fichiers PowerPoint sans avoir besoin de Microsoft Office. Que vous souhaitiez créer des rapports percutants, automatiser la création de présentations en écrivant du code, ou simplement disposer d'un outil pour créer des présentations PowerPoint sans installer Microsoft PowerPoint, IronPPT répond à tous vos besoins.

Il est conçu spécifiquement pour les développeurs qui souhaitent des fonctionnalités telles que :

  • Syntaxe simple et claire
  • Prise en charge des plateformes modernes .NET Framework / .NET Core / .NET 6/7+
  • Traitement PowerPoint léger et rapide

Et oui, vous n'avez absolument pas besoin d'installer Office ou PowerPoint. IronPPT est 100% autonome.

Installation

IronPPT peut être ajouté à vos projets C# via la console du gestionnaire de packages NuGet en exécutant la ligne suivante :

Install-Package IronPPT

Pour la démonstration d'aujourd'hui, nous allons créer un nouveau projet dans Visual Studio. Si vous souhaitez suivre le tutoriel, n'hésitez pas à en fabriquer un vous-même ! Il vous suffit de créer un nouveau projet dans Visual Studio et de sélectionner " Application console " pour commencer.

Avantages d'IronPPT

Application d'interopérabilité Microsoft Office en C# : Alternatives à IronPPT : Figure 2 - IronPPT

Aucune dépendance au bureau

Avec IronPPT, votre application est véritablement indépendante. Vous pouvez le déployer dans n'importe quel environnement (Azure, AWS Lambda, conteneurs Docker ou serveurs Linux) sans installer ni acquérir de licence Microsoft Office.

API propre pour la création de fichiers de présentation

Avec IronPPT, créez de nouveaux fichiers de présentation en quelques lignes de code seulement et ajoutez facilement du texte à une présentation vierge. Lorsque vous créez un nouveau fichier avec IronPPT, vous commencez avec une seule diapositive, prête à être modifiée selon vos besoins. Vous souhaitez ajouter d'autres diapositives ? Quelques lignes de code suffisent pour remplir vos présentations avec autant de diapositives que nécessaire grâce à la méthode simple AddSlide.

using IronPPT;
using IronPPT.Models;

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

// Add text to the first slide
document.Slides[0].TextBoxes[0].AddText("Hello, World!");
document.Slides[0].TextBoxes[1].AddText("Welcome to IronPPT!");

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

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

// Add text to the first slide
document.Slides[0].TextBoxes[0].AddText("Hello, World!");
document.Slides[0].TextBoxes[1].AddText("Welcome to IronPPT!");

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

' Create a new empty presentation
Private document = New PresentationDocument()

' Add text to the first slide
document.Slides(0).TextBoxes(0).AddText("Hello, World!")
document.Slides(0).TextBoxes(1).AddText("Welcome to IronPPT!")

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

Output

! Application d'interopérabilité Microsoft Office en C# Alternatives à C# utilisant IronPPT : Figure 3 - Nouvelle présentation avec texte personnalisé

Comparez cela à l'approche Interop, verbeuse et sujette aux erreurs. IronPPT est propre, lisible et prêt pour la production.

Ajouter des formes et des images personnalisées

Vous cherchez à créer des éléments visuellement attrayants pour votre présentation ? IronPPT permet d'ajouter des formes et des images personnalisées à vos diapositives, vous offrant ainsi un contrôle total sur l'apparence finale de votre présentation.

using IronPPT;
using IronPPT.Models;
using IronPPT.Enums;
using IronPPT.Models.Styles;

// Load an existing presentation
var document = new PresentationDocument("presentation.pptx");
Slide slide = new Slide();

// Add a rectangle shape
Shape shape = new Shape
{
    Type = ShapeType.Rectangle,
    FillColor = Color.LightBlue,
    OutlineColor = Color.Black,
    Width = 200,
    Height = 100,
    Position = (200, 50)
};
slide.AddShape(shape);

// Add an Image
Image image = new Image();
image.LoadFromFile("IronPPT.png");
var img = slide.AddImage(image);
img.Position = (100, 200);
img.Width = 400;
img.Height = 200;

// Add the slide to the document and save
document.AddSlide(slide);
document.Save("presentation.pptx");
using IronPPT;
using IronPPT.Models;
using IronPPT.Enums;
using IronPPT.Models.Styles;

// Load an existing presentation
var document = new PresentationDocument("presentation.pptx");
Slide slide = new Slide();

// Add a rectangle shape
Shape shape = new Shape
{
    Type = ShapeType.Rectangle,
    FillColor = Color.LightBlue,
    OutlineColor = Color.Black,
    Width = 200,
    Height = 100,
    Position = (200, 50)
};
slide.AddShape(shape);

// Add an Image
Image image = new Image();
image.LoadFromFile("IronPPT.png");
var img = slide.AddImage(image);
img.Position = (100, 200);
img.Width = 400;
img.Height = 200;

// Add the slide to the document and save
document.AddSlide(slide);
document.Save("presentation.pptx");
Imports IronPPT
Imports IronPPT.Models
Imports IronPPT.Enums
Imports IronPPT.Models.Styles

' Load an existing presentation
Private document = New PresentationDocument("presentation.pptx")
Private slide As New Slide()

' Add a rectangle shape
Private shape As New Shape With {
	.Type = ShapeType.Rectangle,
	.FillColor = Color.LightBlue,
	.OutlineColor = Color.Black,
	.Width = 200,
	.Height = 100,
	.Position = (200, 50)
}
slide.AddShape(shape)

' Add an Image
Dim image As New Image()
image.LoadFromFile("IronPPT.png")
Dim img = slide.AddImage(image)
img.Position = (100, 200)
img.Width = 400
img.Height = 200

' Add the slide to the document and save
document.AddSlide(slide)
document.Save("presentation.pptx")
$vbLabelText   $csharpLabel

Output

Application d'interopérabilité Microsoft Office en C# : Alternatives à IronPPT : Figure 4 - Ajout d'une forme et d'une image personnalisées à notre présentation

Ajouter des paragraphes stylisés

Vous souhaitez que votre texte fournisse des informations et des détails sur le sujet de votre présentation, tout en constituant un élément visuellement attrayant ? Créez et ajoutez des paragraphes stylisés à votre fichier de présentation avec IronPPT pour maintenir l'attention de vos spectateurs tout au long de votre diaporama.

using IronPPT;
using IronPPT.Models;
using IronPPT.Enums;
using IronPPT.Models.Styles;

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

// Define the paragraph style
var style = new ParagraphStyle()
{
    NoBullet = true,
    RightToLeft = true,
    Indent = 10.00,
    Alignment = TextAlignmentTypeValues.Center,
};

// Create a paragraph with the style
var paragraph = new Paragraph();
paragraph.Style = style;
paragraph.AddText("This is a sample paragraph with custom styles applied.");

// Add the paragraph to the slide
document.AddSlide(slide);
slide.AddParagraph(paragraph);

// Save the presentation to a file
document.Save("presentation.pptx");
using IronPPT;
using IronPPT.Models;
using IronPPT.Enums;
using IronPPT.Models.Styles;

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

// Define the paragraph style
var style = new ParagraphStyle()
{
    NoBullet = true,
    RightToLeft = true,
    Indent = 10.00,
    Alignment = TextAlignmentTypeValues.Center,
};

// Create a paragraph with the style
var paragraph = new Paragraph();
paragraph.Style = style;
paragraph.AddText("This is a sample paragraph with custom styles applied.");

// Add the paragraph to the slide
document.AddSlide(slide);
slide.AddParagraph(paragraph);

// Save the presentation to a file
document.Save("presentation.pptx");
Imports IronPPT
Imports IronPPT.Models
Imports IronPPT.Enums
Imports IronPPT.Models.Styles

' Create a new presentation
Private document = New PresentationDocument()
Private slide As New Slide()

' Define the paragraph style
Private style = New ParagraphStyle() With {
	.NoBullet = True,
	.RightToLeft = True,
	.Indent = 10.00,
	.Alignment = TextAlignmentTypeValues.Center
}

' Create a paragraph with the style
Private paragraph = New Paragraph()
paragraph.Style = style
paragraph.AddText("This is a sample paragraph with custom styles applied.")

' Add the paragraph to the slide
document.AddSlide(slide)
slide.AddParagraph(paragraph)

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

Output

Application d'interopérabilité Microsoft Office en C# : Alternatives à IronPPT : Figure 5 - Sortie de paragraphe stylisé

Inconvénients de l'interopérabilité de Microsoft PowerPoint

1. Nécessite l'installation de PowerPoint

Si Microsoft PowerPoint n'est pas installé, votre application plantera :

using Microsoft.Office.Interop.PowerPoint;

// Attempt to open an existing PowerPoint file
var app = new Application();
var presentation = app.Presentations.Open(@"C:\Slides\Deck.pptx");
using Microsoft.Office.Interop.PowerPoint;

// Attempt to open an existing PowerPoint file
var app = new Application();
var presentation = app.Presentations.Open(@"C:\Slides\Deck.pptx");
Imports Microsoft.Office.Interop.PowerPoint

' Attempt to open an existing PowerPoint file
Private app = New Application()
Private presentation = app.Presentations.Open("C:\Slides\Deck.pptx")
$vbLabelText   $csharpLabel

Problem:

Si PowerPoint n'est pas installé sur la machine (par exemple, sur un serveur cloud ou dans un conteneur Docker), une exception COMException sera levée, généralement :

La récupération de la fabrique de classes COM pour le composant avec CLSID a échoué en raison de l'erreur suivante : 80040154 Classe non enregistrée.

2. Exigence relative au filetage STA

Interop doit s'exécuter sur un thread Single Threaded Apartment (STA), sinon il plante :

// This will crash if called from a background thread in a web app or service
var app = new Application();
// This will crash if called from a background thread in a web app or service
var app = new Application();
' This will crash if called from a background thread in a web app or service
Dim app = New Application()
$vbLabelText   $csharpLabel

Solution de contournement : vous devez encapsuler manuellement les appels dans un thread STA :

Thread thread = new Thread(() =>
{
    // Create a new PowerPoint application
    var app = new Application();

    // Add a presentation and slide
    var pres = app.Presentations.Add();
    pres.Slides.Add(1, PpSlideLayout.ppLayoutText);

    // Save and close the presentation
    pres.SaveAs(@"C:\output.pptx");
    app.Quit();
});

// Set thread apartment state and start
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
Thread thread = new Thread(() =>
{
    // Create a new PowerPoint application
    var app = new Application();

    // Add a presentation and slide
    var pres = app.Presentations.Add();
    pres.Slides.Add(1, PpSlideLayout.ppLayoutText);

    // Save and close the presentation
    pres.SaveAs(@"C:\output.pptx");
    app.Quit();
});

// Set thread apartment state and start
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
Dim thread As New Thread(Sub()
	' Create a new PowerPoint application
	Dim app = New Application()

	' Add a presentation and slide
	Dim pres = app.Presentations.Add()
	pres.Slides.Add(1, PpSlideLayout.ppLayoutText)

	' Save and close the presentation
	pres.SaveAs("C:\output.pptx")
	app.Quit()
End Sub)

' Set thread apartment state and start
thread.SetApartmentState(ApartmentState.STA)
thread.Start()
thread.Join()
$vbLabelText   $csharpLabel

C'est maladroit et fragile, surtout au sein d'ASP.NET ou de services en arrière-plan.

3. Objets COM non gérés et fuites de mémoire

Le défaut de libération des objets COM provoque des fuites de mémoire et des plantages d'application :

var app = new Application();
var presentation = app.Presentations.Open(@"C:\Slides\Deck.pptx");
// Forgetting to release COM objects correctly can lead to memory leaks
presentation.Close();
app.Quit();
// Forgot to release COM objects!
var app = new Application();
var presentation = app.Presentations.Open(@"C:\Slides\Deck.pptx");
// Forgetting to release COM objects correctly can lead to memory leaks
presentation.Close();
app.Quit();
// Forgot to release COM objects!
Dim app = New Application()
Dim presentation = app.Presentations.Open("C:\Slides\Deck.pptx")
' Forgetting to release COM objects correctly can lead to memory leaks
presentation.Close()
app.Quit()
' Forgot to release COM objects!
$vbLabelText   $csharpLabel

4. Syntaxe complexe et verbeuse

L'ajout d'une simple diapositive de texte nécessite énormément de code standard :

var app = new Application();
var presentation = app.Presentations.Add(MsoTriState.msoTrue);
var slide = presentation.Slides.Add(1, PpSlideLayout.ppLayoutText);
slide.Shapes[1].TextFrame.TextRange.Text = "Hello from Interop!";
presentation.SaveAs(@"C:\test.pptx");
presentation.Close();
app.Quit();
var app = new Application();
var presentation = app.Presentations.Add(MsoTriState.msoTrue);
var slide = presentation.Slides.Add(1, PpSlideLayout.ppLayoutText);
slide.Shapes[1].TextFrame.TextRange.Text = "Hello from Interop!";
presentation.SaveAs(@"C:\test.pptx");
presentation.Close();
app.Quit();
Dim app = New Application()
Dim presentation = app.Presentations.Add(MsoTriState.msoTrue)
Dim slide = presentation.Slides.Add(1, PpSlideLayout.ppLayoutText)
slide.Shapes(1).TextFrame.TextRange.Text = "Hello from Interop!"
presentation.SaveAs("C:\test.pptx")
presentation.Close()
app.Quit()
$vbLabelText   $csharpLabel

Comparez cela à la syntaxe propre et gérée d'IronPPT :

using IronPPT;
using IronPPT.Models;

// Create and save a simple presentation with IronPPT
var document = new PresentationDocument();
document.Save("presentation.pptx");
using IronPPT;
using IronPPT.Models;

// Create and save a simple presentation with IronPPT
var document = new PresentationDocument();
document.Save("presentation.pptx");
Imports IronPPT
Imports IronPPT.Models

' Create and save a simple presentation with IronPPT
Private document = New PresentationDocument()
document.Save("presentation.pptx")
$vbLabelText   $csharpLabel

Conclusion : Le grand gagnant pour les projets .NET modernes

Lorsqu'il s'agit d'intégrer l'automatisation PowerPoint à vos applications C#, le choix entre[Microsoft Office Interop PowerPoint](https://learn.microsoft.com/en-us/previous-versions/office/office-12/ff761925(v=office.12) et IronPPT est on ne peut plus clair.

Tout au long de cet article, nous avons exploré les différences fondamentales entre les deux bibliothèques :

  • L'interopérabilité est puissante mais rigide : bien qu'elle puisse gérer des tâches telles que la création de présentations et la conversion de présentations vers d'autres formats, elle exige que PowerPoint soit installé, impose des restrictions sur les threads STA, provoque des fuites de mémoire si l'on n'y prend pas garde et n'a tout simplement pas sa place dans les flux de travail .NET modernes et natifs du cloud. IronPPT , en revanche, est conçu pour les environnements de développement actuels. Il est léger, ne dépend pas de l'installation d'Office, fonctionne parfaitement sur les serveurs web et dans les pipelines CI/CD, et offre une API propre et moderne, facile à utiliser et à maintenir.

Nous avons également examiné des exemples de code réels mettant en évidence les pièges courants de l'interopérabilité — des exceptions de threads et des erreurs COM aux difficultés de déploiement — et les avons comparés à la syntaxe fluide et intuitive d'IronPPT.

Si vous souhaitez vraiment simplifier la création, l'édition et l'exportation de diapositives PowerPoint dans vos applications, sans les contraintes liées à l'interopérabilité , IronPPT est clairement le grand gagnant .

Vous voulez constater la différence par vous-même ? Téléchargez la version d'essai gratuite d'IronPPT et commencez à créer des fichiers PowerPoint de qualité professionnelle en quelques lignes de code C# seulement — aucune installation d'Office n'est requise.

Arrêtez de vous battre avec les objets COM. Commencez à déployer des solutions .NET modernes, rapides et fiables avec IronPPT.

Questions Fréquemment Posées

Quels sont les inconvénients courants de l'utilisation de Microsoft Office Interop pour PowerPoint dans .NET ?

Microsoft Office Interop nécessite l'installation de Microsoft Office, ne supporte que Windows, a une mauvaise compatibilité serveur, manque de sécurité des threads, et implique une gestion des erreurs complexe. IronPPT résout ces problèmes en offrant une solution autonome multiplateforme avec une API simplifiée.

Comment IronPPT améliore-t-il l'automatisation PowerPoint dans les applications .NET ?

IronPPT améliore l'automatisation en offrant une bibliothèque .NET moderne qui permet aux développeurs de créer, lire, éditer et convertir des fichiers PowerPoint sans avoir besoin de Microsoft Office. Il supporte diverses plateformes et fournit une syntaxe propre, ce qui le rend idéal pour les systèmes basés sur le cloud.

Quelles sont les exigences d'installation pour utiliser une bibliothèque PowerPoint .NET ?

IronPPT peut être installé dans des projets C# via la Console du Gestionnaire de Paquets NuGet avec la commande Install-Package IronPPT, sans besoin d'installation de Microsoft Office.

IronPPT peut-il être déployé dans un environnement cloud ?

Oui, IronPPT peut être facilement déployé dans des environnements cloud, y compris AWS Lambda, Azure, des conteneurs Docker, et des serveurs Linux, le tout sans nécessiter l'installation d'Office.

Pourquoi IronPPT est-il considéré comme une meilleure alternative à Interop pour l'automatisation PowerPoint ?

IronPPT est préféré en raison de son design léger, son indépendance vis-à-vis de l'installation d'Office, son support pour une variété de plateformes, et sa API moderne facile à utiliser, qui simplifie l'automatisation PowerPoint dans les projets .NET.

Comment IronPPT simplifie-t-il le processus de création de présentations PowerPoint en C# ?

IronPPT simplifie le processus en permettant aux développeurs d'ajouter facilement du texte, des formes personnalisées, des images et des paragraphes stylés aux présentations en utilisant une API directe, évitant ainsi la complexité d'Interop.

IronPPT nécessite-t-il l'installation de Microsoft Office ou PowerPoint sur le système ?

Non, IronPPT est une bibliothèque autonome qui ne nécessite pas l'installation de Microsoft Office ou PowerPoint, ce qui le rend hautement polyvalent pour les applications serveur et cloud.

Qu'est-ce qui rend IronPPT adapté aux workflows .NET modernes ?

IronPPT est adapté aux workflows .NET modernes en raison de sa nature légère, autonome, son support multiplateforme, et sa capacité à fonctionner efficacement dans des environnements serveur et cloud sans les dépendances et la verbosité d'Interop.

Jordi Bardia
Ingénieur logiciel
Jordi est le plus compétent en Python, C# et C++, et lorsqu'il ne met pas à profit ses compétences chez Iron Software, il programme des jeux. Partageant les responsabilités des tests de produit, du développement de produit et de la recherche, Jordi apporte une immense valeur à l'amé...
Lire la suite