2011-03-08 3 views
1

J'ai créé une diapositive PowerPoint avec Office 2010 (et 2007) dont j'ai besoin d'extraire du texte par programmation. Je devine que quelque part Office crée un fichier XML qui peut avoir tout le texte dont j'ai besoin.Extraction de texte à partir de la diapositive PowerPoint

Existe-t-il un moyen de le faire et comment irais-je?

J'ai VS2010, SharePoint Designer 2007 disponible pour les outils.

Merci,

Risho

Répondre

0

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.

  1. La dure: Passez par chaque paragraphe, et non seulement tirer le texte , mais également tirer tous les mise en forme (gras, des puces, etc.)
  2. La façon simple: Parcourez chaque entrée de texte et tirez simplement le texte, sans formatage.
  3. 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 
+0

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

+1

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.). –

+0

Merci pour votre aide. C'est ce que j'étais après! – Risho

Questions connexes