![如何编写宏以使选定的单词成为强调标记?](https://linux22.com/image/1304108/%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%E5%AE%8F%E4%BB%A5%E4%BD%BF%E9%80%89%E5%AE%9A%E7%9A%84%E5%8D%95%E8%AF%8D%E6%88%90%E4%B8%BA%E5%BC%BA%E8%B0%83%E6%A0%87%E8%AE%B0%EF%BC%9F.png)
我如何为 OpenOffice Writer 编写一个宏,使之在我用鼠标选择的单词/字符上添加一个像点一样的强调标记?
我尝试录制宏,但是失败了。
我希望这里有人可以帮助我
我正在尝试为 OpenOffice Writer 和 LibreOffice Writer 编写一个宏。此宏将在 Writer 中添加一个工具栏,类似于 MS Word 中文版中的中文标点符号工具栏。工具栏的按钮是中文标点符号。其中一个按钮将是中国简体中文中使用的强调符号。强调符号是当文本方向为水平时强调的汉字下方的一个点,当文本方向为垂直时强调的汉字右侧的一个点。
我不懂 OpenOffice Basic 或其他用于编写计算机程序的语言,但我知道 Writer 的宏录制器可以录制一些代码,可以用来编写我需要的宏。我不断地在 Google 上搜索更多信息并学习如何编写宏。对于大多数标点符号,代码都很简单。
例如,要插入停止标记,代码为:
rem U+3002
sub cp01
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 = "Text"
args1(0).Value = "。"
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())
end sub
但是 LibreOffice 3.4 的宏录制器无法为强调符号录制可用的宏。实际上,当我在 Writer 的“字符”对话框的“字体效果”中将强调符号从“(无)”更改为“点”时,Writer 意外关闭。我被迫下载并安装 OpenOffice.org 3.3 和 3.4。
OpenOffice.org 3.3 的宏录制器也无法录制,但 3.4 的宏录制器可以录制。宏为:
sub Test20120206_1
rem --------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem -------------------------------
dispatcher.executeDispatch(document, ".uno:EmphasisMark", "", 0, Array())
end sub
该宏不起作用。
答案1
我找到了网页: http://user.services.openoffice.org/en/forum/viewtopic.php?f=45&t=21813
FJCC 的宏让我非常高兴,因为它很简短,并且关于如何将效果应用于选定的字符,这可能是我需要的。
Doc = ThisComponent
Selections = Doc.CurrentSelection
FirstSelection = Selections.getByIndex(0)
TextString = FirstSelection.String
UCaseStr = UCase(TextString)
FirstSelection.String = UCaseStr
然后我将此代码与 MS Word、日语和 Pitonyak A 中的宏重新组合,并找到了一个可行的代码:
sub EmphasisMark
Doc = ThisComponent
Selections = Doc.CurrentSelection
FirstSelection = Selections.getByIndex(0)
If FirstSelection.CharEmphasis = com.sun.star.text.FontEmphasis.NONE Then
FirstSelection.CharEmphasis = com.sun.star.text.FontEmphasis.DOT_BELOW
Else
FirstSelection.CharEmphasis = com.sun.star.text.FontEmphasis.NONE
End If
end sub
这就是我需要的。终于……