首页 文章

在OpenOffice Calc中自动化图表的 Headers

提问于
浏览
2

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

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

1 回答

  • 0

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

    Enabling macros

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

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

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


    Creating a new macro

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

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

    New module


    The actual macro

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

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

    Expected results


    Further improving the macro

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

    • 每次想要更新 Headers 时都必须重新运行宏 .

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

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

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

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

    • 必须按索引处理图表 .

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

    oChart = oCharts.getByName("Chart Name")
    

    Further reading

相关问题