首页 > 解决方案 > 显示简单 TextBox 形状的 LibreOffice 宏

问题描述

我无法弄清楚(或找到示例)如何在 LibreOffice Calc 6.2 中执行以下简单操作:

我在一张纸(称为ShapeA)中有一个绘图形状(例如一个简单的矩形),在另一张纸中有一个文本框形状(称为TextboxB)。我想做以下事情:当我单击 ShapeA 时,TextboxB 必须出现在屏幕上(不更改当前工作表,可能在对话框中),然后单击鼠标关闭。

我猜想与 ShapeA 相关的宏可能看起来像这样:

Sub Main
oDrawPage = ThisComponent.getDrawPage()
oTb = oDrawPage.getByName("TextBoxB")
oTb.show()
End Sub

有人可以建议我应该在这个宏中添加什么来完成所描述的任务吗?

更新:我想要完成的事情(回复 Jim K.)。

我有一个非常杂乱的图表,有很多形状。每个形状都有一些与之相关的文本信息。每个形状或其周围没有足够的空间来包含此信息。所以必须有一种方法来显示关于每个形状的信息。此外,此信息应以预先格式化的方式显示(它包含代码和其他结构化信息)。

我的计划是为每个图表形状创建一个包含相关信息的文本框,将这些文本框放在其他工作表中,并有可能在查看图表时单击任何形状并在弹出的文本框中查看相关信息而无需离开图表,然后通过一个简单的操作(例如单击它)关闭文本框。

用 LO 的形状和宏来实现这个任务听起来可行吗?

标签: libreofficelibreoffice-basic

解决方案


怎么样:将所有内容放在同一张纸上,但在需要时隐藏文本框。

使用改编自https://ask.libreoffice.org/en/question/93050/how-can-i-hideshow-a-shape-of-my-spreadsheet-using-a-macro/的以下代码。

Sub ShapeClickedA
    ShowHideShape("TextBoxA")
End Sub
Sub ShapeClickedB
    ShowHideShape("TextBoxB")
End Sub

Sub ShowHideShape(shapeName As String)
    oDrawPage = ThisComponent.getSheets().getByName("Sheet1").getDrawPage()
    For iShape = 0 To oDrawPage.Count - 1
        oShape = oDrawPage.getByIndex(iShape)
        If oShape.Name = shapeName Then
            If oShape.Visible Then
                oShape.Visible = 0  'Not Visible
            Else
                oShape.Visible = 1  'Visible
            End If
        End If
    Next iShape
End Sub

如果您还没有,请通过右键单击并选择名称来设置文本框的名称...然后右键单击两者ShapeATextBoxA分配宏ShapeClickedA。对其他形状对也这样做。结果是这样的:

  1. 在单击任何内容之前。

没有显示文本框

  1. 点击ShapeA。(要再次关闭它,请单击ShapeATextBoxA)。ShapeB功能类似。

显示的文本框A

  1. 也可以同时显示两者。

显示 TextBoxA 和 TextBoxB


推荐阅读