显示简单文本框形状的 LibreOffice 宏
LibreOffice macro showing simple TextBox shape
我无法弄清楚(或找不到示例)如何在 LibreOffice Calc 6.2 中执行以下简单操作:
我在 sheet(称为 ShapeA)中有一个绘图形状(例如一个简单的矩形),在另一个 sheet(称为 TextboxB)中有一个文本框形状。我想执行以下操作:当我单击 ShapeA 时,TextboxB 必须出现在屏幕上(不更改当前 sheet,可能在对话框中),然后单击鼠标关闭。
我想与 ShapeA 关联的宏可能如下所示:
Sub Main
oDrawPage = ThisComponent.getDrawPage()
oTb = oDrawPage.getByName("TextBoxB")
oTb.show()
End Sub
有人可以建议我应该在这个宏中放入什么来完成所描述的任务吗?
更新:我想要完成的事情(回复 Jim K.)。
我有一个非常杂乱的图表,有很多形状。每个形状都有一些与之关联的文本信息。每个形状或其周围没有足够的 space 来包含此信息。所以必须有一种方法来显示关于每个形状的信息。此外,此信息应以预格式化的方式显示(它包含代码和其他结构化信息)。
我的计划是为每个图表形状创建一个包含相关信息的文本框,将这些文本框放在其他 sheet 中,并有可能在查看图表时单击任何形状并查看相关信息在不离开图表的情况下在弹出的文本框中,然后通过简单的操作(例如单击它)关闭文本框。
用 LO 的形状和宏来实现这个任务听起来可行吗?
这样怎么样:将所有内容放在同一个 sheet 但在需要时隐藏文本框。
使用以下改编自 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
如果您还没有设置文本框的名称,请右键单击并选择 名称... 然后右键单击 ShapeA
和TextBoxA
并分配宏 ShapeClickedA
。对其他形状对也这样做。结果是这样的:
- 点击任何内容之前。
- 点击
ShapeA
。 (要再次关闭它,请单击 ShapeA
或 TextBoxA
)。 ShapeB
功能类似。
- 也可以同时显示。
我无法弄清楚(或找不到示例)如何在 LibreOffice Calc 6.2 中执行以下简单操作:
我在 sheet(称为 ShapeA)中有一个绘图形状(例如一个简单的矩形),在另一个 sheet(称为 TextboxB)中有一个文本框形状。我想执行以下操作:当我单击 ShapeA 时,TextboxB 必须出现在屏幕上(不更改当前 sheet,可能在对话框中),然后单击鼠标关闭。
我想与 ShapeA 关联的宏可能如下所示:
Sub Main
oDrawPage = ThisComponent.getDrawPage()
oTb = oDrawPage.getByName("TextBoxB")
oTb.show()
End Sub
有人可以建议我应该在这个宏中放入什么来完成所描述的任务吗?
更新:我想要完成的事情(回复 Jim K.)。
我有一个非常杂乱的图表,有很多形状。每个形状都有一些与之关联的文本信息。每个形状或其周围没有足够的 space 来包含此信息。所以必须有一种方法来显示关于每个形状的信息。此外,此信息应以预格式化的方式显示(它包含代码和其他结构化信息)。
我的计划是为每个图表形状创建一个包含相关信息的文本框,将这些文本框放在其他 sheet 中,并有可能在查看图表时单击任何形状并查看相关信息在不离开图表的情况下在弹出的文本框中,然后通过简单的操作(例如单击它)关闭文本框。
用 LO 的形状和宏来实现这个任务听起来可行吗?
这样怎么样:将所有内容放在同一个 sheet 但在需要时隐藏文本框。
使用以下改编自 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
如果您还没有设置文本框的名称,请右键单击并选择 名称... 然后右键单击 ShapeA
和TextBoxA
并分配宏 ShapeClickedA
。对其他形状对也这样做。结果是这样的:
- 点击任何内容之前。
- 点击
ShapeA
。 (要再次关闭它,请单击ShapeA
或TextBoxA
)。ShapeB
功能类似。
- 也可以同时显示。