1
我有一個使用Office 2010(和2007)構建的PowerPoint幻燈片,我需要以編程方式從中提取文本。我猜在某處Office創建一個xml文件,可能有我需要的所有文本。從PowerPoint中提取文本幻燈片
有沒有辦法做到這一點,我將如何去布特呢?
我有VS2010,SharePoint Designer 2007可用於工具。
感謝,
Risho
我有一個使用Office 2010(和2007)構建的PowerPoint幻燈片,我需要以編程方式從中提取文本。我猜在某處Office創建一個xml文件,可能有我需要的所有文本。從PowerPoint中提取文本幻燈片
有沒有辦法做到這一點,我將如何去布特呢?
我有VS2010,SharePoint Designer 2007可用於工具。
感謝,
Risho
是啊,有一個硬的方式,簡單,甚至簡單的方法使用LINQ到XML做到這一點。請注意,我是而不是使用Open XML SDK - 我只是在XML Literals和System.IO.Packaging中使用VB.NET。您當然可以使用SDK,C#等以更復雜的方式執行此操作 - 取決於您的環境/首選項。
這裏是你會怎麼做?#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
感謝您的回覆。我想知道是否會工作,因爲pptx是一個編譯文件。我試圖用記事本打開它,但所有得到的是混亂的數據。 – Risho 2011-03-08 21:32:18
複製你的PPTX。然後複製它,將擴展名從「.pptx」更改爲「.zip」。然後解壓縮它。所有的幻燈片都將作爲XML文件(slide1.xml,slide2.xml等)位於「ppt」文件夾中。 – 2011-03-08 21:41:29
感謝您的幫助。這是我的追求! – Risho 2011-03-10 21:27:07