如何通过LibreOffice Basic移除工具栏命令或设置命令为禁用状态?
如何通过宏移除或禁用工具栏中的命令
我想要从工具栏移除一个命令,或将命令设置为禁用状态。目前我已成功打开配置对话框,但不清楚后续操作步骤。以下是我编写的代码:
sub SetStatusOfCommand dim document as object dim dispatcher as object document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") dim args1(0) as new com.sun.star.beans.PropertyValue args1(0).Name = "ResourceURL" args1(0).Value = "private:resource/toolbar/custom_toolbar_6925" dispatcher.executeDispatch(document, ".uno:ConfigureDialog", "", 0, args1()) rem and now ...? end sub
直接通过配置对话框没法用宏完成自动化操作,得用UNO API直接操作UI配置,以下是两种需求的实现代码:
1. 禁用指定工具栏命令
这段代码会把目标命令设为禁用状态,用户无法点击:
sub DisableToolbarCommand dim oToolbarManager as object dim oToolbar as object dim nCommandIndex as integer dim sToolbarURL as string dim sTargetCommand as string ' 目标工具栏URL(和你代码里的一致) sToolbarURL = "private:resource/toolbar/custom_toolbar_6925" ' 替换成你要禁用的命令URL,比如".uno:Save" sTargetCommand = ".uno:Save" ' 获取工具栏管理器 oToolbarManager = createUnoService("com.sun.star.ui.ToolbarManager") oToolbarManager.init(sToolbarURL, ThisComponent.CurrentController.Frame) ' 获取工具栏对象 oToolbar = oToolbarManager.getToolbar() ' 遍历找到目标命令的位置 for nCommandIndex = 0 to oToolbar.getCount() - 1 dim oCommand as object oCommand = oToolbar.getCommandInfo(nCommandIndex) if oCommand.CommandURL = sTargetCommand then ' 设置为禁用 oToolbar.setCommandEnabled(nCommandIndex, false) exit for end if next nCommandIndex ' 保存修改 oToolbarManager.commit() end sub
2. 从工具栏移除指定命令
这段代码直接把目标命令从工具栏中删除:
sub RemoveToolbarCommand dim oToolbarManager as object dim oToolbar as object dim nCommandIndex as integer dim sToolbarURL as string dim sTargetCommand as string sToolbarURL = "private:resource/toolbar/custom_toolbar_6925" ' 替换成你要移除的命令URL sTargetCommand = ".uno:Save" oToolbarManager = createUnoService("com.sun.star.ui.ToolbarManager") oToolbarManager.init(sToolbarURL, ThisComponent.CurrentController.Frame) oToolbar = oToolbarManager.getToolbar() ' 倒序遍历找目标命令并移除(避免索引混乱) for nCommandIndex = oToolbar.getCount() - 1 downto 0 dim oCommand as object oCommand = oToolbar.getCommandInfo(nCommandIndex) if oCommand.CommandURL = sTargetCommand then oToolbar.removeCommand(nCommandIndex) exit for end if next nCommandIndex ' 保存修改 oToolbarManager.commit() end sub
注意点
- 一定要把代码里的
sTargetCommand换成你实际要操作的命令URL,你可以在配置对话框里查看命令属性获取这个URL - 必须调用
commit()方法,否则修改不会被保存 - 确保LibreOffice/OpenOffice允许执行宏,在软件的信任中心里设置好对应权限
内容的提问来源于stack exchange,提问作者need2know
相关产品推荐
相关产品推荐

