65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Autoit 脚本从 MS Word 文档生成 PowerPoint 演示文稿

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2016年7月19日

CPOL

3分钟阅读

viewsIcon

13192

downloadIcon

179

一个用于从结构化的 MS Word 文档生成 PowerPoint 演示文稿的程序

引言

该程序是一个 AutoIt[1] 脚本,用于从结构化的 MSWord 文档生成 PowerPoint 演示文稿。它也是一个示例,展示了我们如何使用 COM(组件对象模型)对象,特别是使用 用于 MSWord 和 PowerPoint 的 COM 对象

对于那些对此主题感兴趣的人,我已经在之前的文章中讨论过 AutoIt 和 COM 技术:一个 Autoit 脚本,用于从 MSWord 文档中提取数据并将其发送到 Internet 应用程序

本文涵盖以下主题:

  • 如何访问 MSWord 文档
  • 如何提取数据
  • 如何创建(并可能启动)演示文稿

任何可以被 MS Word 读取的文档都可以生成演示文稿,前提是它的结构化为章节,并且样式为 Heading 1Heading 2Heading 3 和可能的 Title

MSWord 文档

Word 公开了用于管理文档的对象;如果加载了文档,该对象可以包含文档,它是一组方法和集合,如段落、表格、注释、样式等。

该应用程序处理具有文本样式和标题样式的段落,这些名称采用安装语言:例如,意大利语中的 heading 样式是 Titolo;在下面的片段中,是一种获取本地名称的方法[2]

...
$fl = "C:\D\Condor\Attività\CourseInformatique\JavaScriptCourse.odt"
$oDoc = ObjGet($fl)	; open an existing MSWord document
...
; for to be independent from local language we must obtain the local name using a key of the style:
$title = $oDoc.Styles(-63).NameLocal
$heading1 = $oDoc.Styles(-2).NameLocal
$heading2 = $oDoc.Styles(-3).NameLocal
$heading3 = $oDoc.Styles(-4).NameLocal
$normal = $oDoc.Styles(-1).NameLocal	
$BodyText = $oDoc.Styles(-67).NameLocal

PowerPoint

整个 Microsoft PowerPoint 应用程序本质上是对象 Application,它是 Presentationsslides 的集合。

Application
    Presentations (collection of presentations)
        Presentation
            Slides (collection of slides)
                Slide

通过向演示文稿添加具有特定布局的新幻灯片来生成幻灯片

Global $oPPT = ObjCreate("PowerPoint.Application")
$PPT = $oPPT.Presentations.Add(True) ; add a Presentation
...
$oSlide = $PPT.Slides.Add($index, $ppLayoutText)	; add a slide
...

每个布局都有一组可以包含数据、图表、表格等的形状;在该程序中,我使用了具有标题和副标题的布局以及具有标题和文本的布局。

可以通过设置 SlideMaster 对象的一些属性或直接在特定幻灯片上进行演示文稿的美化

$PPT.SlideMaster.Background.Fill.foreColor.RGB = 51200   ; green
$PPT.SlideMaster.Background.Fill.oneColorGradient(3, 1, 1)

执行程序

该程序需要 AutoIt v3.3.14.2;它从一个表单[3]开始,该表单要求提供文档名称、可能参与幻灯片构建的样式、结束时的操作以及非常简单的个性化设置。

构建规则

以下是创建演示文稿的简单规则

  • 每个 titleheading 1 生成一个幻灯片,其中包含其 heading 1heading 2 的列表
  • 每个 titleheading 1heading 2 生成一个带有内容的幻灯片,其中内容是 titleheading 1heading 2 之后具有 NormalStandard 样式的第一个段落
  • 对于 titleheading 1,如果找不到上述文本,则会取消幻灯片;对于 heading 2,会插入相关的 heading 3

最终操作

除了保存演示文稿(文件名主体加上 .ppt)和可能保存 .pdf 副本之外,该程序还可以启动演示文稿,并使用事件 SlideShowEnd 等待其结束

Global $endPresentation = false
Global $oPPT = ObjCreate("PowerPoint.Application")
...
$EventObject = ObjEvent($oPPT, "PWTevent_") 	; Start receiving Events
...
$PPT.SlideShowSettings.Run() ; start the slide show
While Not $endPresentation   ; wait end of presentation
	Sleep(10)
Wend
...
Func PWTevent_SlideShowEnd($pres)
	$endPresentation = True
EndFunc   ;==>PWTSlideShowEnd

增强功能

如果 Word 文档的结构正确,并且遵循在每个章节的第一段中指定其内容的良好做法,则无需修改 Word 文档。但是,该程序提供了通过对文档进行简单操作来干预演示文稿的机会

  • 书签:一组连续的段落
  • 添加评论

在第一种情况下,书签名称必须是相关标题的名称,在第二种情况下,注释必须与标题相关联。 下面是从书签和注释创建字典的程序片段,以及如何使用它。

...
Global $commentsDict = ObjCreate("Scripting.Dictionary") ; Create a Scripting Dictionary
For $comment In $oDoc.Comments
	$commentsDict.Item($comment.scope.text) = $comment.range.text
Next
For $bookmark In $oDoc.bookmarks
	$commentsDict.Item($bookmark.name) = $bookmark.range.text
Next
...
If $commentsDict.Exists($parag) Then
	$oSlide.Shapes(2).TextFrame.TextRange.Text = $commentsDict.Item($parag)
EndIf
...

注释

  1. ^AutoIt 是一种免费的类似 BASIC 的脚本语言,是 PowerShell 的替代品,最初设计用于自动化与 Windows GUI 的交互。 AutoIt 可以在 Windows 上解释或编译运行。
    它附带了许多库,这些库除了可以访问 COM 对象和创建图形界面之外,还可以实现其他功能。
  2. ^感谢 Lene Fredborg, DocTools, www.thedoctools.com
  3. ^该表单由我的实用程序 formGen 创建,您可以在这个 网站 中找到它。
© . All rights reserved.