从Excel中建立PowerPoint演示文档

Technorati 标签: ,,

在《Excel & Access Integration:With Office 2007》的最后一章中,介绍了Microsoft Excel与Word、PowerPoint和Outlook整合的基本技术。其中,介绍Excel和PowerPoint整合技术时,演示了如何在Excel工作簿中创建演示文档,然后使用自动化将其转换为PowerPoint演示文档,如题。

我觉得这是一项非常有用的技术,充分发挥了两种应用程序各自的优点。在Excel工作簿中,每张工作表代表演示文档中的一张幻灯片,在工作表中能够充分利用Excel的数据分析和处理功能生成生动且有意义的图表或表格。然后,将这些工作表转换为PowerPoint幻灯片,从而利用PowerPoint的演示功能。

下面的示例沿用《Excel & Access Integration:With Office 2007》中的示例文档WorkbookToPowerPoint.xlsm,以演示这项技术。在该工作簿中,包含有四张工作表,分别包含四个区域(Asia、South America、United Kingdom、United States)的收入数据以及相应的图表分析(如下图所示)。

WorkbookSheetsList

当然,这些工作表都是设计好了的,与PowerPoint中的幻灯片形式相同,每一张工作表代表一张幻灯片,分别演示一个区域的收入数据及分析情况。下面,我们将这些工作表转换为相应PowerPoint演示文档中的幻灯片。

首先,需要添加对Microsoft PowerPoint ╳╳ Object Library的引用(其中╳╳代表该对象库的版本号),如下图所示。

AddPPTRef

然后,在标准模块中输入下面的代码:

   1: Sub WorkbooktoPowerPoint()
   2:     
   3:     '声明变量
   4:     Dim pp As PowerPoint.Application
   5:     Dim PPPres As PowerPoint.Presentation
   6:     Dim PPSlide As PowerPoint.Slide
   7:     Dim xlwksht As Excel.Worksheet
   8:     Dim MyRange As String
   9:     Dim MyTitle As String
  10:     Dim SlideCount As Integer
  11:     
  12:     '开启PowerPoint,添加新的演示文档并使其可见
  13:     Set pp = New PowerPoint.Application
  14:     Set PPPres = pp.Presentations.Add
  15:     pp.Visible = True
  16:         
  17:     '设置数据和标题的单元格区域
  18:     MyRange = "A1:I27"
  19:     
  20:     '开始循环每张工作表
  21:     For Each xlwksht In ActiveWorkbook.Worksheets
  22:         '设置每张幻灯片的标题
  23:         MyTitle = xlwksht.Range("C19").Value
  24:  
  25:         '复制单元格区域为图片
  26:         xlwksht.Range(MyRange).CopyPicture _
  27:         Appearance:=xlScreen, Format:=xlPicture
  28:     
  29:         '统计幻灯片并添加新幻灯片作为下一个可用的幻灯片号
  30:         SlideCount = PPPres.Slides.Count
  31:         Set PPSlide = PPPres.Slides.Add(SlideCount + 1, ppLayoutTitleOnly)
  32:         PPSlide.Select
  33:          
  34:         '粘贴图片并调整其位置
  35:         PPSlide.Shapes.Paste.Select
  36:         pp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
  37:         pp.ActiveWindow.Selection.ShapeRange.Top = 100
  38:         
  39:         '为该幻灯片添加标题并移到下一张工作表
  40:         PPSlide.Shapes.Title.TextFrame.TextRange.Text = MyTitle
  41:     Next xlwksht
  42:             
  43:     '激活PPT演示文档
  44:     pp.Activate
  45:     
  46:     '释放内存
  47:     Set PPSlide = Nothing
  48:     Set PPPres = Nothing
  49:     Set pp = Nothing
  50:             
  51: End Sub

第4行至第10行声明了7个变量。其中变量pp代表PowerPoint应用程序对象,变量PPPres代表PowerPoint的演示文档(Presentation)对象,变量PPSlide代表PowerPoint幻灯片(Slide)对象,变量xlwksht代表Worksheet对象,变量MyRange是一个字符串变量用来存储和传递单元格区域,变量MyTitle是一个字符串变量用来存储代表幻灯片标题的字符串,变量SlideCount是用于计数的整型变量。

第13行创建一个PowerPoint对象的新实例,第14行添加新的演示文档,第15行设置Visible属性为True,使PowerPoint可见。

第18行将希望作为幻灯片内容的区域赋值给变量MyRange。

第21行开始遍历工作簿中的每张工作表。

第23行将工作表中单元格C19中的内容赋值给变量MyTitle,作为每张幻灯片的标题。

第26行和第27行使用CopyPicture方法将指定的单元格区域作为图片。

第31行使用Slide对象的Add方法在演示文档中添加新幻灯片,其中变量SlideCount+1指定添加的幻灯片的索引号,并使用ppLayoutTitleOnly参数确保所创建的幻灯片带有标题文本框。

第35行至第37行粘贴图片到当前幻灯片中,并使图片水平居中且与顶部垂直距离为100像素。

第40行为该幻灯片添加标题。

第47至第49行释放对象变量所占用的内存。

运行WorkbooktoPowerPoint过程后,结果如下图所示:

WorkbookSheetsToPPTResult


提示:您可以在评论中使用HTML标签,且任何与HTML标签相同的符号都会被理解为HTML标签并以相应的格式显示.如果您的评论中有代码,可以使用相应的标签,例如,如果有VB或VBA代码,则可以使用[vb]标签,即[vb]放置的代码[/vb],这样会很清晰地显示代码.

发表评论