LibreOffice替换宏 - 只替换一次并替换格式

时间:2017-07-17 12:36:51

标签: replace macros libreoffice

在LibreOffice Writer中,我想编写一个查找某个字符串的宏(例如" abc")并用另一个字符串替换它(" def"),但是,只有如果原始字符串是粗体字。而且,我只想在第一场比赛中这样做。

使用LibreOffice搜索和替换对话框很容易,但我找不到在宏中执行此操作的方法:

  • 首先,在this API reference中,我没有看到与仅查找粗体字符串相关的设置。最近的匹配是" SearchStyles",但这指的是整个段落的样式而不是搜索词。

  • 其次,我没有看到只替换第一次出现的命令;我只看到" replaceAll"。

有没有办法只替换粗体字,只有第一个匹配?

1 个答案:

答案 0 :(得分:1)

Andrew Pitonyak's macro document有许多与搜索相关的好例子。以下内容改编自清单7.41和清单7.45。

Sub FindBoldString
    Dim oDoc As Object
    Dim oSearch As Object
    Dim oFound As Object
    Dim srchAttributes(0) As New com.sun.star.beans.PropertyValue
    oDoc = ThisComponent
    oSearch = oDoc.createSearchDescriptor()
    oSearch.SearchString = "abc"
    oSearch.SearchRegularExpression=False
    oSearch.searchStyles = True
    oSearch.searchAll = False
    srchAttributes(0).Name = "CharWeight"
    srchAttributes(0).Value = com.sun.star.awt.FontWeight.BOLD
    oSearch.SetSearchAttributes(srchAttributes)
    oFound = oDoc.findFirst(oSearch)
    If Not IsNull(oFound) Then
        oFound.SetString("def")
        oFound.CharWeight = com.sun.star.awt.FontWeight.BOLD
    End If
End Sub