在OpenOffice Calc中自动化图表的标题

时间:2013-09-16 18:04:06

标签: macros charts openoffice.org openoffice-calc

我甚至不确定我能在Excel中做到这一点,但感到有理由相信,在VBA世界中有足够的能量让我能够实现。但是,在可预见的未来,我已经切换到OpenOffice,所以我的问题是:

在OpenOffice 4.0中,是否可以将图表的标题链接到电子表格单元格?基本上我想在图表上有一个很好的粗体标题,当电子表格上的特定单元格更新时,它会发生变化。此单元格已控制在图表上绘制哪些数据。

1 个答案:

答案 0 :(得分:0)

是的,这是可能的,使用OpenOffice宏很容易。一步步骤:

启用宏

转到工具>选项菜单,然后单击 OpenOffice.org 下的安全部分。在那里,单击宏安全性按钮。现在,在安全级别选项卡上,确保您的设置允许您运行宏。

我的设置很低,因为我是我运行的所有宏的作者,如果你不确定这是你的情况,你可能想要使用更高的设置。

注意:小心,如果你不幸或生活在90年代,邪恶的宏会造成严重的伤害!


制作新的广告

现在您可以运行它们,您必须创建一个新宏。 OpenOffice接受各种语言,包括Python,但是既然你在问题中提到了VBA,我将在这里使用它的OO版本。

转到工具>宏>组织宏> OpenOffice.org Basic,在文件树下添加一个新模块。给它一个有意义的名字。

New module


实际的宏

创建新模块后,将弹出编辑器屏幕,请在下面编写以下代码:

' Set the title of the first Chart to the contents of C1
Sub SetTitle
    ' Get active sheet
    oSheet = ThisComponent.CurrentController.ActiveSheet

    ' Get the cell containing the chart title, in this case C1
    oCell = oSheet.getCellRangeByName("C1")
    oCharts = oSheet.getCharts() 

    ' Get the chart with index 0, which is the first chart created
    ' to get the second you would use 1, the third 2 and so on...
    oChart = oCharts.getByIndex(0)


    oChartDoc = oChart.getEmbeddedObject()

    'Change title
    oChartDoc.getTitle().String = oCell.getString() 
End Sub

要测试它,只需创建一个图表,在单元格C1上放置一些标题并运行宏。您可以通过多种方式运行宏,出于测试目的,只需使用您用于创建模块的同一窗口上的“运行”按钮。这是预期的结果:

Expected results


进一步改善宏

宏现在有一些问题,例如:

  • 每次想要更新标题时都必须重新运行宏。

这很容易解决。有许多方法可以自动执行宏执行,我最熟悉的方法是让它在一个循环上运行,结合延迟,比如5秒,并在文件加载后立即启动。

Sub Main
    Do While True
        SetTitle()
        Wait(5000)
    Loop
End Sub

从现在开始,你应该调用Main子而不是SetTitle。

要在启动时运行宏,请转到工具>在事件选项卡上自定义,然后从列表中选择打开文档,然后单击按钮。在选择宏的对话框中,选择 Main 。现在关闭文档,重新打开它,瞧!

  • 必须按索引处理图表。

您可以使用图表名称(右键单击图表>名称),如下所示:

oChart = oCharts.getByName("Chart Name")

进一步阅读