Passer au contenu du pied de page
COMPARAISONS DE PRODUITS

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

When building .NET applications that work with PowerPoint presentation files, developers typically turn to one of two approaches: the traditional Microsoft Office Interop PowerPoint, or a modern .NET library like IronPPT.

Bien que les deux options permettent d'accéder à la manipulation de diapositives PowerPoint, les différences en termes de convivialité, de performances et d'évolutivité sont considérables. Si vous avez déjà eu du mal à configurer Microsoft Office sur un serveur, ou si vous avez dû faire face à des erreurs COM cryptiques pendant le déploiement, vous apprécierez ce qu'IronPPT apporte à la table.

Dans ce guide, nous allons procéder à une comparaison détaillée des deux approches, présenter des cas d'utilisation réels et démontrer comment IronPPT vous offre tout ce que fait Interop - sans aucune douleur.

Qu'est-ce que Microsoft Office Interop PowerPoint?

C# Microsoft Office Interop Application C# Alternatives Using IronPPT : Figure 1 - Page NuGet PowerPoint de Microsoft Office Interop

Microsoft Office Interop 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 les applications Office telles que PowerPoint, Word et Excel. Il fonctionne en lançant une instance invisible de PowerPoint en arrière-plan et en la manipulant par le biais d'un code.

Bien que fonctionnel, Interop présente de sérieuses limites :

Les principales limites de Microsoft Interop PowerPoint

  • <Microsoft Office doit être installé : Interop exige physiquement que PowerPoint soit installé sur la machine hôte. Il s'agit d'un obstacle majeur pour les applications web, les systèmes basés sur le cloud ou les conteneurs Docker.
  • Windows uniquement : Le logiciel ne fonctionne que sous Windows. Pas de support pour Linux ou macOS.
  • Mauvaise compatibilité côté serveur : L'exécution d'Interop dans des services d'arrière-plan, des pipelines CI/CD ou des serveurs web n'est pas fiable et entraîne souvent des erreurs telles que HRESULT : 0x800706B5.
  • Pas à l'abri des threads : Les objets COM ne sont pas intrinsèquement sûrs pour les threads, ce qui rend la concurrence délicate.
  • <Déploiement difficile : l'expédition d'une application autonome devient difficile car l'installation d'Office dépend de l'exécution.
  • Gestion des erreurs plus difficile : les erreurs générées par COM InterOp sont souvent vagues et difficiles à déboguer.

Voici un exemple de la lourdeur d'Interop :

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, vous devez vous assurer que PowerPoint est installé, vous occuper des licences Office, gérer les ressources manuellement et prier pour que rien ne se brise dans les environnements sans tête.

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 cherchiez à créer des rapports qui sortent vraiment du lot, que vous souhaitiez automatiser la création de présentations en écrivant du code pour elles, ou que vous vouliez simplement un outil pour créer des présentations PowerPoint sans avoir besoin d'installer Microsoft PowerPoint, IronPPT a tout ce qu'il vous faut.

Elle est conçue spécifiquement pour les développeurs qui souhaitent bénéficier de 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 pas besoin d'installer Office ou PowerPoint. IronPPT est 100% autonome.

Installation

IronPPT peut être ajouté à vos projets C# via la console NuGet Package Manager 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 voulez suivre le mouvement, n'hésitez pas à en faire une vous-même ! Il suffit de créer un nouveau projet dans Visual Studio et de sélectionner l'application console pour commencer.

Avantages d'IronPPT

Alternatives C# d'application interop de Microsoft Office à l'aide d'IronPPT : Figure 2 - IronPPT

Aucune dépendance à l'égard d'Office

Avec IronPPT, votre application est vraiment indépendante. Vous pouvez le déployer dans n'importe quel environnement - Azure, AWS Lambda, conteneurs Docker ou serveurs Linux - sans avoir à installer ou à acquérir une licence Microsoft Office.

Une 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, et ajoutez facilement du nouveau texte à la présentation vierge. Lorsque vous créez un nouveau fichier avec IronPPT, vous commencez avec une seule diapositive, prête à être modifiée pour répondre à vos besoins. Vous souhaitez ajouter d'autres diapositives ? Il suffit de quelques lignes de code pour remplir vos présentations avec autant de diapositives que vous le souhaitez grâce à la méthode 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

Sortie

C# Microsoft Office Interop Application C# Alternatives Using IronPPT : Figure 3 - Nouvelle présentation avec texte personnalisé

Comparez cela à l'approche verbeuse et sujette aux erreurs d'Interop. IronPPT est propre, lisible et prête 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 supports the addition of custom shapes and images to your slides, giving you full control over the final appearance of your presentation.

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

Sortie

C# Microsoft Office Interop Application C# Alternatives Using 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 visuel attrayant ? Créez et ajoutez des paragraphes stylisés à votre fichier de présentation avec IronPPT pour vraiment garder ces spectateurs engagés avec 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

Sortie

C# Microsoft Office Interop Application C# Alternatives Using IronPPT : Figure 5 - Sortie d'un 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 se bloquera :

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

Problème:

Si PowerPoint n'est pas installé sur la machine (comme un serveur cloud ou un conteneur Docker), cela provoquera une exception COMException, typiquement :

La récupération de la fabrique de classes COM pour le composant avec CLSID a échoué en raison de l'erreur suivante : 80040154 Class not registered.

2. STA Thread Requirement

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

// 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 envelopper 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

Il s'agit d'un outil maladroit et fragile, en particulier dans les services ASP.NET ou les services d'arrière-plan.

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

Le fait de ne pas libérer les objets COM entraîne des fuites de mémoire et des plantages d'applications :

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 textuelle nécessite des tonnes de texte passe-partout :

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 gagnant incontestable pour les projets .NET modernes

When it comes to building PowerPoint automation into your C# applications, the choice between Microsoft Office Interop PowerPoint and IronPPT couldn’t be clearer.

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

  • Interop est puissant mais rigide - bien qu'il puisse gérer des tâches telles que la création de présentations et la conversion de présentations dans d'autres formats, il exige que PowerPoint soit installé, applique des restrictions de threads STA, provoque des fuites de mémoire si vous ne faites pas attention, et n'a tout simplement pas sa place dans les flux de travail .NET modernes et natifs du nuage.
  • IronPPT, quant à lui, est conçu pour les environnements de développement actuels. Il est léger, ne dépend pas de l'installation d'Office, fonctionne de manière transparente 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 d'Interop - des exceptions de thread et des erreurs COM aux maux de tête liés au 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 le bagage hérité d'Interop - IronPPT est le gagnant incontestable.

Vous voulez voir 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# - aucune installation d'Office n'est requise.

Arrêtez de vous débattre avec les objets COM. Commencez à livrer 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