如何编写宏以使选定的单词成为强调标记?

如何编写宏以使选定的单词成为强调标记?

我如何为 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

这就是我需要的。终于……

相关内容