在Excel或Powerpoint 2007/2010中滚动图表

时间:2012-04-19 08:06:29

标签: excel excel-vba activex powerpoint powerpoint-vba vba

我的图表在X轴上有很多点(例如心电图)。

如何在Powerpoint 2007/2010中将此图表作为水平滚动对象? 如果我只是粘贴它,它会调整大小以适应宽度并变得不可读。

我想通过为图表添加水平滚动条来保持高度。

2 个答案:

答案 0 :(得分:3)

如果可以的话,我不是肯定。说过我可以给你一个有趣的选择。 :)

假设我们的图表在Excel中看起来像这样

enter image description here

右键单击图表,然后单击Copy。打开Ms Paint并粘贴该图片。保存该图片,例如C:\MyChart.Jpg

接下来打开MS Powerpoint并导航到Developer标签。 (查看快照)在开发人员选项卡中,单击其他控件按钮并选择“Microsoft Web浏览器”,然后将该控件插入相应的幻灯片中。相应地调整大小。还要放置一个命令按钮。将其命名为Show Chart或其他您认为正确的其他内容:)

enter image description here

双击命令按钮并将此代码粘贴到那里

Private Sub CommandButton1_Click()
    WebBrowser1.Navigate "C:\MyChart.jpg"
End Sub

现在按F5运行演示文稿。你的屏幕看起来像这样。

enter image description here

当您按下命令按钮时,您将得到您想要的内容:)

enter image description here

这种方法的缺点

1)您无法在MS Powerpoint中编辑图表。您必须在Excel中执行此操作并重复整个过程以将其另存为图像。

2)您无法分发您的PPT。您必须使用PPT单独发送图像,并且您还必须更改命令按钮代码(假设PPT和图像保留在同一文件夹中

Private Sub CommandButton1_Click()
    WebBrowser1.Navigate ActivePresentation.Path & "\MyChart.jpg"
End Sub

您必须在ppt中嵌入xls文件并编写复杂的代码以从excel文件中提取图表并将其保存到用户temp directory。然后,您可以在Webbrowser1

中使用该图片

答案 1 :(得分:2)

由于这从不同角度解决问题,我发布了一个全新的答案:)

此方法会跟进我的上一条评论

  
    
      

您必须在ppt中嵌入xls文件并编写复杂的代码以从excel文件中提取图表并将其保存到用户临时目录中。然后,您可以在Webbrowser1

中使用该图像     
  

<强>后续

  
    
      

@Siddharth Rout:谢谢!但是,再分配正是我想要的。而且我不可能将图像作为单独的文件(我要将其提供给我的客户)。

    
  

你的后顾之忧不应该让你担心;)

设计模式

在powerpoint幻灯片中插入包含图表的Excel对象。你的幻灯片应该是这样的

enter image description here

现在,如我的其他答案所示,插入“Microsoft Web浏览器”和“命令按钮”。将Web浏览器放在Excel对象上方以隐藏它。

您的屏幕现在应该如下所示。

enter image description here

粘贴此代码并运行您的演示文稿......就是这样......真的;)

<强> CODE

Option Explicit

Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _
(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

Private Const MAX_PATH As Long = 260

Dim ImageFile As String

Private Sub CommandButton1_Click()
    ExtractToTemp
    WebBrowser1.Navigate ImageFile
End Sub

Sub ExtractToTemp()
    Dim oSl As PowerPoint.Slide
    Dim oSh As PowerPoint.Shape

    Dim oXLApp As Object, oXLWB As Object, oXLSht As Object
    Dim mychart As Object

    Set oSl = ActivePresentation.Slides(1)

    Set oSh = oSl.Shapes(1)

    With oSh.OLEFormat.Object.Sheets(1)
        .Shapes(1).Copy
    End With

    '~~> Establish an EXCEL application object
    On Error Resume Next
    Set oXLApp = GetObject(, "Excel.Application")

    If Err.Number <> 0 Then
        Set oXLApp = CreateObject("Excel.Application")
    End If
    Err.Clear
    On Error GoTo 0

    oXLApp.Visible = False

    '~~> Open the relevant file
    Set oXLWB = oXLApp.Workbooks.Add
    Set oXLSht = oXLWB.Worksheets(1)

    oXLSht.Paste

    '~~> Save Picture Object
    ImageFile = TempPath & "Tester.jpg"

    If Len(Dir(ImageFile)) > 0 Then Kill ImageFile

    Set mychart = oXLSht.ChartObjects(1).Chart
    mychart.Export FileName:=ImageFile, FilterName:="jpg"

    '~~> Wait till the file is saved
    Do
        If FileExists(ImageFile) = True Then Exit Do
        DoEvents
    Loop

    '~~> Clean Up And Close Excel
    oXLWB.Close SaveChanges:=False
    oXLApp.Quit

    Set oXLWB = Nothing
    Set oXLApp = Nothing
End Sub

'~~> Get User's TempPath
Function TempPath() As String
    TempPath = String$(MAX_PATH, Chr$(0))
    GetTempPath MAX_PATH, TempPath
    TempPath = Replace(TempPath, Chr$(0), "")
End Function

'~~> Function tot check if file exists
Public Function FileExists(strFullPath As String) As Boolean
    On Error GoTo Whoa
    If Not Dir(strFullPath, vbDirectory) = vbNullString Then FileExists = True
Whoa:
    On Error GoTo 0
End Function

用于测试的示例文件:请下载此文件并运行演示文稿。如果您在单击按钮后看到图表,则表示它可以正常工作:)

https://skydrive.live.com/redir.aspx?cid=cdd3f8abe20bbe3b&resid=CDD3F8ABE20BBE3B!162&parid=root

博客:受到这篇文章的启发,我在博客上发布了一篇文章,详细介绍了整个过程。

主题:在Powerpoint中滚动Excel图表

链接http://www.siddharthrout.com/2012/04/21/scrolling-excel-chart-in-powerpoint/