2011-03-08 140 views
1

我有一個使用Office 2010(和2007)構建的PowerPoint幻燈片,我需要以編程方式從中提取文本。我猜在某處Office創建一個xml文件,可能有我需要的所有文本。從PowerPoint中提取文本幻燈片

有沒有辦法做到這一點,我將如何去布特呢?

我有VS2010,SharePoint Designer 2007可用於工具。

感謝,

Risho

回答

0

是啊,有一個硬的方式,簡單,甚至簡單的方法使用LINQ到XML做到這一點。請注意,我是而不是使用Open XML SDK - 我只是在XML Literals和System.IO.Packaging中使用VB.NET。您當然可以使用SDK,C#等以更復雜的方式執行此操作 - 取決於您的環境/首選項。

  1. 難的方法:通過每一個 段去,而不是隻拉 文本,但也拉的所有 格式(粗體,要點, 等)
  2. 最簡單的方法:通過每個 文本條目,只需拉動文本, 沒有格式。
  3. 更簡單的方法:轉到每個 幻燈片,只需拉出所有文本。

這裏是你會怎麼做?#2(簡單的方法):

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

感謝您的回覆。我想知道是否會工作,因爲pptx是一個編譯文件。我試圖用記事本打開它,但所有得到的是混亂的數據。 – Risho 2011-03-08 21:32:18

+1

複製你的PPTX。然後複製它,將擴展名從「.pptx」更改爲「.zip」。然後解壓縮它。所有的幻燈片都將作爲XML文件(slide1.xml,slide2.xml等)位於「ppt」文件夾中。 – 2011-03-08 21:41:29

+0

感謝您的幫助。這是我的追求! – Risho 2011-03-10 21:27:07

相關問題