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

Posted

技术标签:

【中文标题】在 OpenOffice Calc 中自动化图表的标题【英文标题】:Automating the Title of a chart in OpenOffice Calc 【发布时间】:2013-09-16 18:04:06 【问题描述】:

我什至不确定我是否可以在 Excel 中做到这一点,但我有理由相信,只要在 VBA 世界里有足够的了解,我就能做到这一点。但是,在可预见的未来,我已经切换到 OpenOffice,所以我的问题是:

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

【问题讨论】:

【参考方案1】:

是的,这是可能的,而且使用 OpenOffice 宏非常容易。一步一步:

启用宏

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

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

注意:小心,如果你运气不好或生活在 90 年代,一个邪恶的宏可能会造成严重的伤害!


创建新宏

现在您可以运行它们,您必须创建一个新宏。 OpenOffice 接受包括 Python 在内的多种语言,但由于您在问题中提到了 VBA,我将在此处使用 OO 的版本。

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


实际的宏

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

' 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 上放置一些内容作为标题并运行宏。您可以通过多种方式运行宏,出于测试目的,只需使用用于创建模块的同一窗口上的“运行”按钮。这是预期的结果:


进一步改进宏

宏目前存在一些问题,例如:

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

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

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

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

要让宏在启动时运行,请转到 Events 选项卡上的 Tools > Customize 并从列表中选择 Open Document 然后点击按钮。在选择宏的对话框中,选择 Main。现在关闭文档,重新打开它,瞧!

必须通过索引来处理图表。

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

oChart = oCharts.getByName("Chart Name")

进一步阅读

我将此宏基于来自this PDF by Jacek Wiślicki 的代码。 This piece of official reference 详细解释了图表结构、其字段和服务。 This post on the official forums 似乎有一些非常相关的信息。 A guide on different ways to run a macro A great introduction to macro programming

【讨论】:

以上是关于在 OpenOffice Calc 中自动化图表的标题的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenOffice Calc 中创建图表

如何根据公式自动选择 OpenOffice Calc 单元格?

OpenOffice Calc 时间转换

如何在 OOo Calc 中自动填充 OpenOffice Math 公式编辑器?

Openoffice Calc - 更改文本大小写

我可以在 OpenOffice Calc 中创建水平自动过滤器吗