在 Libreoffice Calc Basic 中将部分单元格文本标记为粗体?

Marking parts of a cell's text as bold in Libreoffice Calc Basic?

我知道可以在 localc 电子表格中手动编辑单元格文本并将其中的某些文本标记为粗体、斜体或其他。

我想用宏做同样的事情。我正在构建一个插入特定单元格的摘要字符串。摘要字符串包含多行,例如:

类别 1:项目 1、项目 2、项目 3
类别 2:项目 1、项目 2、...
类别 N: item1, item2, ...

单元格中可能有 ~4 到 ~12 个类别行,具体取决于给定类别是否为空。

我必须执行的功能正在运行,目前完全符合我的要求。但现在我想像这样将单元格的 "category" 部分加粗:

类别 1: 项目 1、项目 2、项目 3
类别 2: 项目 1,项目 2,...
类别 N: item1, item2, ...

是否可以在 LO Basic 中执行此操作?我知道在单元格中手动编辑是可能的,但这会破坏编写此脚本的全部目的。

这是我目前所拥有的,在构建摘要字符串并将其插入单元格对象(名为 "cell",够奇怪)的函数底部:

newline = chr(10)
cell  = ThisComponent.Sheets.getByName("Summary").getCellRangeByName("Skills")



Dim next_nl as Integer
Dim next_colon as Integer
Dim TC as Object ' TextCursor object pointing into the cells text

TC = cell.createTextCursor

next_nl=1 ' start at first char of cell

While (next_nl > 0)
    TC.collapseToStart
    TC.gotoStart(false)  ' move to start of cell

    if (next_nl > 1) Then TC.goRight(next_nl, false) ' move to next_nl

    TC.goRight(0,true) ' begin selection

    next_colon = InStr(next_nl, cell.String, ":")

    If next_colon Then
        TC.goRight(next_colon, true) ' extend selection to next colon
        TC.CharWeight = com.sun.star.awt.FontWeight.BOLD ' bold the selection
        next_nl = InStr(next_colon, cell.String, newline) ' jump to the next LF
    Else
        next_nl = 0 ' no more colons to be found, finish up.'
    Endif

Wend

部分有效。第一行是 Category 粗体和 items 普通文本。完美,到目前为止。

不幸的是,从第二行开始到倒数第二行中间的所有内容(嗯?什么?这很奇怪)都是粗体。我怀疑 Instr() 对混合格式文本的处理可能不太正确,导致字符计数错误。

我尝试过的其他事情/想法:

PS:我知道...我是个完美主义者。大写类别名称会起作用(事实上,确实如此)但有点难看。将它们加粗会更好...并且此摘要页面的目的是为了漂亮地展示。

InStr() 工作正常,即使在 Windows 上也是如此。 goRight().

附近只有一个简单的错误
Sub BoldPartOfCell
    Dim next_nl As Integer  ' position of the next newline
    Dim next_colon As Integer
    Dim cursor As Object  ' TextCursor object pointing into the cell's text

    NEWLINE = Chr(10)  ' the LibreOffice line break character
    cell = ThisComponent.Sheets.getByName("Summary").getCellRangeByName("Skills")
    cursor = cell.createTextCursor
    next_nl = 1  ' start at first char of cell
    Do While True
        cursor.collapseToStart
        cursor.gotoStart(False)  ' move to start of cell
        if (next_nl > 1) Then cursor.goRight(next_nl, False) ' move to next_nl
        next_colon = InStr(next_nl, cell.String, ":")
        If next_colon > 0 Then
            ' extend selection to next colon
            cursor.goRight(next_colon - next_nl + 1, True)
            cursor.CharWeight = com.sun.star.awt.FontWeight.BOLD  ' bold the selection
            next_nl = InStr(next_colon, cell.String, NEWLINE)  ' jump to the next LF
        Else
            Exit Do
        End If
    Loop
End Sub