• 2009-08-19

    认识PowerPoint中的Chart对象模型 - [技术探索]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/pptaddins-logs/44590440.html

    认识PowerPoint中的Chart对象模型

    在office 2007发行版本中,对图表的修改并没有涉及整个的office,如在Word和PowerPoint中就没有提供。但是在office 2007 SP2和office 2010中微软在Word和PowerPoint中提供了统一的图表对象模型。图表由Office共享的绘图层绘制,如果你熟悉在Excel 2007中应用图表对象,你就能很容易地在Word或PowerPoint建立相似的解决方案。

    很多时候,公司需要在文档或演示文稿中建立客户指定数据的图表,在一般情况下,这些图表有一个标准格式,大小和位置。这个图表对象可以作为解决方案的一部分自动地生成所需要的图表,从而既节省了时间,又避免了繁重的体力劳动。

    下面提供一个例子,在PowerPoint中建立一个图表。

    Sub CreateChart()
        Dim oChart As Chart
        Dim oChartData As ChartData
        Dim oWB As Excel.Workbook
        Dim oWS As Excel.Worksheet
        Set oChart = ActivePresentation.Slides(1).Shapes.AddChart.Chart '建立chart
        Set oChartData = ActivePresentation.Slides(1).Shapes(1).Chart.ChartData
        Set oWB = oChartData.Workbook
        Set oWS = oWB.Worksheets(1)
        oWS.ListObjects("Table1").Resize gWorkSheet.Range("A1:B5") '增加数据
        oWS.Range("Table1[[#Headers],[Series 1]]").Value = "销售"
        oWS.Range("a2").Value = "自行车"
        oWS.Range("a3").Value = "配件"
        oWS.Range("a4").Value = "修理"
        oWS.Range("a5").Value = "服装"
        oWS.Range("b2").Value = "1000"
        oWS.Range("b3").Value = "2500"
        oWS.Range("b4").Value = "4000"
        oWS.Range("b5").Value = "3000"
        With oChart
            .ChartStyle = 4
            .ApplyLayout 4
            .ClearToMatchStyle
        End With
        oChart.HasTitle = True '增加标题
        With oChart.ChartTitle '格式化标题
            .Characters.Font.Size = 18
            .Text = "2007 Sales"
        End With
        With oChart.Axes(xlValue)
            .HasTitle = True
            .AxisTitle.Text = "$"
        End With
        oChart.ApplyDataLabels
        Set oWS = Nothing
        oWB.Application.Quit
        Set oWB = Nothing
        Set oChartData = Nothing
        Set oChart = Nothing
    End Sub

    由上面的代码,我们可以看到一个图表仍然通过一个Shape来加载。

    在PowerPoint中,通过编程来操纵图表为我们在演示过程中设计图表的动态外观打开了一片门。

     

    分享到:

    评论

  • 关注你的技术,如果能出本这方面的书,我第一个买。
  • 谢谢无极兄指点!
    你的代码在我这儿(SP1)还是出错-无效请求。难道是因为版本原因?
  • Sub ChartAnim()
    With ActivePresentation.Slides(1).Shapes(1)
    With .AnimationSettings
    .Animate = True
    .EntryEffect = ppEffectFade
    .ChartUnitEffect = ppAnimateBySeriesElements
    End With
    End With
    End Sub

    上述代码在2003版通过,但是2007版chartuniteffect出错,说指定的shape不是图表。
    回复hxhgxy说:
    Office2007重新结构了Chart,但在Sp2之前的Chart非常不健壮,这也是你代码出错的原因,并不是因为代码有错,而是Chart对象还不完整.要测试代码,请安装Sp2。
    另外,我建议你不要用这样的代码来设置对象动画。从officeXp开始,微软重写了一个新的动画系统,AnimationSettings对象存在的唯一理由是为了兼容,在officeXp之后的版本中使用这个对象,可能的后果是清除所有页面的动画并引发不可预知的错误。
    更可靠,更有效的编写方式是:
    Sub test()
    Dim shp As Shape
    Dim sld As Slide
    Set shp = ActiveWindow.Selection.ShapeRange(1)
    Set sld = ActiveWindow.View.Slide
    sld.TimeLine.MainSequence.AddEffect shp, msoAnimEffectFade,msoAnimateChartBySeries
    End Sub
    2009-09-20 20:17:16
  • 无极兄对Chart的动画研究如何?我在2007版中设置Chart的chartuniteffect属性总是出错,甚至直接将帮助里面的代码贴过去也不行。