如何在 libre office basic 中使用模块?
Posted
技术标签:
【中文标题】如何在 libre office basic 中使用模块?【英文标题】:How to use a module in libre office basic? 【发布时间】:2021-03-24 15:07:26 【问题描述】:我习惯了 VBA,但我应该调试一些 libre office 基本代码,所以我尝试在代码隐藏中编写一个基本模块来处理我的工作表。
问题是,每当我尝试运行模块时,它似乎不知道起点在哪里等等,当我在 excel vba 中启动这段代码时,它运行起来很容易。也许有人知道如何在 libre office 中处理模块以及为什么有一个 main 方法..
REM ***** BASIC *****
Sub Main
Test()
End Sub
Sub Test
Dim MyStringVariable As String
MyStringVariable = "Wow!"
Worksheets(1).Range("A1").Value = MyStringVariable
End Sub
【问题讨论】:
dim document as objectdim dispatcher as object rem ---------------------------------------------------------------------- rem get access to the document document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") rem ---------------------------------------------------------------------- dim args1(0) as new com.sun.star.beans.PropertyValue args1(0).Name = "ToPoint" args1(0).Value = "$a$1" dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
这也是 libre office 的相同逻辑^^
不太一样的逻辑。此代码不适用于 Worksheets (1),但适用于 ActiveSheet。这不是 LibreOffice 代码,这是一个“调度程序脚本”。你可以认为这只是击键的记录,仅此而已。这对于成熟的编程来说是不够的。如果您决定认真对待开放式办公室,请查看Pitonyak's book。不要连续阅读,根据目录选择给定时刻所需的章节(我自己是这样开始的)。
好的,谢谢,但是我实际上是通过 libre office 在 cmets 中录制这个宏,它会自动为我创建它
【参考方案1】:
这里的模块不承载任何功能负载——这只是为了方便将项目的过程和功能划分为逻辑相关的代码组。
您的代码无法工作,因为此 Basic 不知道工作表,它使用 ThisComponent.GetSheets() 方法获取当前电子表格的所有工作表。这里集合的元素从 0 开始编号,而不是像您在 VBA 中习惯的那样从 1 开始编号(这也适用于书籍的工作表,以及行数和列数):
REM ***** BASIC *****
Sub Main
' This is just "template" - you can leave it empty, or remove it, or fill with code '
End Sub
Sub Test
Dim MyStringVariable As String
MyStringVariable = "Wow!"
ThisComponent.GetSheets().getByIndex(0).getCellRangeByName("A1").setString(MyStringVariable)
' Better write this as '
Dim oSheets As Variant
Dim oSheet As Variant
Dim oCell As Variant
oSheets = ThisComponent.getSheets()
oSheet = oSheets.getByIndex(0)
oCell = oSheet.getCellByPosition(0, 0)
oCell.setString(MyStringVariable)
End Sub
【讨论】:
以上是关于如何在 libre office basic 中使用模块?的主要内容,如果未能解决你的问题,请参考以下文章
如何避免连接器在 Open Office/Libre Office Draw 中移过形状
如何从 Office VBA 与 Libre Sheet 交互
如何在 Libre Office 中打开文件并将其保存为 .doc 文件?