有没有办法告诉 PowerPoint 在创建图表时不要打开 Excel?

Posted

技术标签:

【中文标题】有没有办法告诉 PowerPoint 在创建图表时不要打开 Excel?【英文标题】:Is there a way to tell PowerPoint not to open Excel when creating charts? 【发布时间】:2012-07-16 02:11:38 【问题描述】:

Slide.Shapes.AddChart() 自动打开 Excel。即使我快速做Chart.ChartData.Workbook.Application.Visible = false,它仍然会显示一段时间。这使得自动创建图表很容易出错,因为用户必须尽量不要触摸不断弹出的 Excel 应用程序。

使用WithWindow = false 打开演示文稿在创建新图表时仍会打开 Excel。

【问题讨论】:

【参考方案1】:

我会建议另一种方法来克服同样的问题。

    在 powerpoint VBA 中添加对“Microsoft Excel 12.0 对象库”的引用

    确保用户在此操作之前,必须通过 yuser 表单弹出窗口打开任何 excel。

    在VBA中创建一个excel并在下面的代码中设置其参数

    添加powerpoint图表,用户在添加图表时无法看到底层excel表的打开,可以通过代码控制excel选项卡。

示例代码:

Option Explicit

Sub AddExcelChartSample()

    Dim xlApp As Excel.Application, xlWkbk As Excel.Workbook

    Dim pres As PowerPoint.Presentation, sld As PowerPoint.Slide, iCount As Integer, chtShape As PowerPoint.Shape

    'Open up the excel instance and set parameters


    Set xlApp = New Excel.Application
    With xlApp
        .WindowState = xlNormal
        .Top = -1000
        .Left = -1000
        .Height = 0
        .Width = 0
    End With


    Set sld = PowerPoint.ActiveWindow.View.Slide



    For iCount = 1 To 10

        Set chtShape = sld.Shapes.AddChart(xlLine)
        Set xlWkbk = chtShape.Chart.ChartData.Workbook
        With xlWkbk

            .Sheets(1).Range("A2").Value = "Test 1"
            .Sheets(1).Range("A3").Value = "Test 2"
            .Sheets(1).Range("A4").Value = "Test 3"

        End With

        chtShape.Chart.Refresh

        xlWkbk.Close False


    Next iCount


    xlApp.Quit

End Sub

【讨论】:

【参考方案2】:

此行为是“设计使然”,Microsoft 对更改不感兴趣。这就是 UI 的运作方式。

您可以做的是在 Excel 中创建图表(使用互操作或 OpenXML),然后将该文件导入(插入)到 PowerPoint 中。

从 MSDN 查看此链接

【讨论】:

我还没有测试过,但这与 Slide.AddChart 有什么不同?这不会自动打开 Excel 工作簿吗? @simendsjo 代码还具有创建图表所需的数据。所以它可能不会弹出excel。由于我很少使用 windows,所以无法尝试上面的代码。 这正是我正在做的 (Shapes.AddChart),所以即使从代码调用它也会打开 excel @simendsjo 更新了我的答案。这种行为甚至出现在 Microsoft Office 2013 消费者预览版中。 我明白了.. 这是一个糟糕的设计!我已经与 PowerPoint 斗争了将近 2 周,很明显它不是为了实现无缝自动化而创建的。在 excel 中创建图表并添加到 PowerPoint 的问题有几个问题。该图表未与 PowerPoint“集成”,必须打开 Excel 进行编辑,并且颜色主题等 PowerPoint 功能也不起作用。 OpenXML 解决方案是我将在下一个版本中研究的东西,只需要把这个解决方案拿出来 :)【参考方案3】:

这是一个可能的解决方法。

Sub ChartExample()
Dim s As Shape
Set s = Application.Presentations(1).Slides(1).Shapes.AddOLEObject(ClassName:="Excel.Chart")
End Sub

然后您将通过s.OLEFormat.Object 操作您添加的图表。我只是进行了轻微的实验,但它没有打开外部 Excel 应用程序,除非我激活了该对象,否则我没有看到任何极端的闪烁。一个折衷方案是,至少在 Powerpoint 2010 中,您需要将其转换为使用所有功能。如果这不起作用,您可以随时尝试web components.

编辑: 我不明白为什么这种方法会导致问题,但为了进一步提供帮助,这里有更多代码显示实际操作对象。这是用对象而不是工作簿等编写的,因此不需要进行引用。它只要求用户在他们的机器上安装 Excel。

Option Explicit
Const xlcolumns = 2
Sub ChartExample()
Dim s As Shape
Dim wb As Object, chart As Object, data As Object
Set s = Application.Presentations(1).Slides(1).Shapes.AddOLEObject(ClassName:="Excel.Chart")
Set wb = s.OLEFormat.Object
Set chart = wb.Sheets(1)
Set data = wb.Sheets(2)
'Set the range for the chart data
chart.setsourcedata Source:=data.Range("A1:C7"), PlotBy:= _
        xlcolumns
'Update data values for the chart
data.Range("B1").Value = "Column Label 1"
data.Range("C1").Value = "Column Label 2"
data.Range("A2:C7").clearcontents
data.Range("A2").Value = "Row Label"
data.Range("B2").Value = 7
data.Range("C2").Value = 11
End Sub

【讨论】:

我希望图表的数据也出现在 powerpoint 中。看来我必须嵌入或链接 Excel 工作簿才能使用它,不幸的是,这对我的用例来说可能更糟。 数据在Excel.Chart对象的Sheet1中,可以通过代码修改。请参阅我编辑的答案。 谢谢,但这仍然只是“有效”。该图表是作为图片而不是实际图表添加的。 PowerPoint 无法操作图表,因为它是通过 PowerPoint 添加的。添加图表模板后,您无法应用它(或者您可以,它只是不做任何事情)。它没有添加到图表占位符等... 好吧,我不知道你对图表有这么多具体要求。抱歉,这对您没有任何价值。 我可能应该多指定一点。添加后,应该可以从 PowerPoint 对图表进行一些可选的后处理。这是我第一次将 PowerPoint 自动化,我已经对我已经偶然发现的许多怪癖感到非常困惑。恐怕我不得不告诉用户在演示时不要触摸他们的机器生成 - 不要认为我会因为这种行为而获得奖牌:/

以上是关于有没有办法告诉 PowerPoint 在创建图表时不要打开 Excel?的主要内容,如果未能解决你的问题,请参考以下文章

如何将图表从 Excel 复制到 PowerPoint?

MS Access 2003 - 有没有办法以编程方式定义图表的数据?

在 powerpoint 中编辑图表数据

使用 Python 将图表从 Excel 转换为 PowerPoint

将 Excel 图表粘贴到 PowerPoint 幻灯片中

有没有办法将百分比变化标签添加到图表的末尾