Oui, il y a une dure, une simple et et même de façon plus simple de le faire avec LINQ to XML. Notez que je suis et non en utilisant le SDK Open XML - J'utilise simplement VB.NET avec XML Literals et System.IO.Packaging. Vous pouvez certainement le faire de manière plus complexe en utilisant le SDK, le C#, etc. - cela dépend de votre environnement/préférences.
- La dure: Passez par chaque paragraphe, et non seulement tirer le texte , mais également tirer tous les mise en forme (gras, des puces, etc.)
- La façon simple: Parcourez chaque entrée de texte et tirez simplement le texte, sans formatage.
- La manière encore plus simple: Rendez-vous sur chaque diapositive et tirez simplement tout le texte.
Voilà comment vous feriez # 2 (la manière simple):
Imports System.IO
Imports System.IO.Packaging 'Add reference to WindowsBase for this
Imports <xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">
Imports <xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
Imports <xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
Module Module1
Public Const documentRelationshipType As String = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
Sub Main()
Dim slide, document As XElement
Dim pptPackage As Package = Nothing
Dim slidePart, documentPart As PackagePart
Dim filePath As String = "C:\Users\Todd\Desktop\yourpresentation.pptx"
pptPackage = Package.Open(filePath, FileMode.Open, FileAccess.ReadWrite)
Using pptPackage
Dim documentRelationship As PackageRelationship = pptPackage.GetRelationshipsByType(documentRelationshipType).FirstOrDefault
Dim documentUri As Uri = PackUriHelper.ResolvePartUri(New Uri("/", UriKind.Relative), documentRelationship.TargetUri)
documentPart = pptPackage.GetPart(documentUri)
document = XElement.Load(New StreamReader(documentPart.GetStream))
Dim slideList = From e In document.<p:sldIdLst>.<p:sldId>
For i = 0 To slideList.Count - 1
Dim slideReference As String = slideList(i)[email protected]:id.ToString
slidePart = pptPackage.GetPart(PackUriHelper.ResolvePartUri(documentPart.Uri, documentPart.GetRelationship(slideReference).TargetUri))
slide = XElement.Load(New StreamReader(slidePart.GetStream))
Dim rawText = From e In slide...<a:t>
For Each t In rawText
Console.WriteLine(t.Value)
Next
Next
End Using
Console.ReadLine()
End Sub
End Module
Merci pour votre réponse. Je me demande si cela fonctionnerait puisque le pptx est un fichier compilé. J'ai essayé de l'ouvrir dans le Bloc-notes, mais tous ont des données brouillées. – Risho
copiez votre PPTX. changez l'extension de ".pptx" en ".zip" avec la copie. Puis décompressez-le. Toutes vos diapositives seront dans le dossier "ppt" à l'intérieur en tant que fichiers XML (slide1.xml, slide2.xml, etc.). –
Merci pour votre aide. C'est ce que j'étais après! – Risho