【问题标题】:Extrating Text from PowerPoint Slide从 PowerPoint 幻灯片中提取文本
【发布时间】:2011-03-08 19:07:40
【问题描述】:

我有一张使用 Office 2010(和 2007)构建的 PowerPoint 幻灯片,我需要以编程方式从中提取文本。我猜 Office 在某个地方创建了一个 xml 文件,其中可能包含我需要的所有文本。

有没有办法做到这一点,我该如何解决?

我有可用于工具的 VS2010、SharePoint Designer 2007。

谢谢,

理庄

【问题讨论】:

    标签: xml powerpoint


    【解决方案1】:

    是的,使用 Linq-to-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).@r: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 是一个编译文件。我试图在记事本中打开它,但得到的都是乱码。
    • 复制你的PPTX。然后使用它的副本,将扩展名从“.pptx”更改为“.zip”。然后解压。您所有的幻灯片都将作为 XML 文件(slide1.xml、slide2.xml 等)在“ppt”文件夹内。
    • 感谢您的帮助。这就是我所追求的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    相关资源
    最近更新 更多