【问题标题】:Libreoffice get bookmark insert in textLibreoffice 在文本中获取书签插入
【发布时间】:2021-08-27 10:49:17
【问题描述】:

在 LibreOffice 中是否可以获取插入到文本中的书签?

通过下面的代码,我可以获得所有可用书签的列表,但我只想要实际插入文本中的书签。

XBookmarksSupplier xBookmarksSupplier = UnoRuntime.queryInterface(XBookmarksSupplier.class, x当前组件); XNameAccess xNamedBookmarks = xBookmarksSupplier.getBookmarks();

【问题讨论】:

  • 您的意思是“查找链接到某些现有书签的所有文本字段”吗?
  • 是的,我想在文本中找到链接到书签的文本字段。在下面的示例中,我想找到文本文件中有 BOOKMARK_1 和 BOOKMARK_2。示例 - 文件 odt:使用下面的代码,我 BOOKMARK_1 可以获得我可用的所有书签的列表,但我只想要在文本中插入实际上是 BOOKMARK_2 的那些。

标签: libreoffice bookmarks


【解决方案1】:

希望这会有所帮助:

Sub MyBookmarks
Dim oBookmarks As Variant
Dim oElementNames As Variant
Dim oBookmark As Variant
Dim oTextFields As Variant
Dim oEnum As Variant
Dim oTextField As Variant
Dim sSourceName As String
Dim i As Long, j As Long 
Dim sResult As String
Rem First step - collect Bookmarks
    oBookmarks = ThisComponent.getBookmarks()
    oElementNames = oBookmarks.getElementNames()
Rem Create list of Bookmarks to count Text Fields with it
    ReDim oBookmark(LBound(oElementNames) To UBound(oElementNames))
    For i = LBound(oElementNames) To UBound(oElementNames)
        oBookmark(i) = Array(oElementNames(i),0)
    Next i
Rem Enumerate Text Fields
    oTextFields = ThisComponent.getTextFields()
    oEnum = oTextFields.createEnumeration()
    Do While oEnum.hasMoreElements()
        oTextField = oEnum.nextElement()
        sSourceName = oTextField.SourceName
        For i = LBound(oBookmark) To UBound(oBookmark)
            If oBookmark(i)(0) = sSourceName Then
                oBookmark(i)(1) = oBookmark(i)(1) + 1
                Exit For
            EndIf 
        Next i
    Loop
Rem Show results    
    sResult = ""
    For i = LBound(oBookmark) To UBound(oBookmark)
        If oBookmark(i)(1) > 0 Then
            sResult = sResult + oBookmark(i)(0) + " (" + oBookmark(i)(1) + ")" + Chr(10)
        EndIf 
    Next i
    If Len(sResult) > 0 Then
        sResult = Left(sResult, Len(sResult)-1)
        MsgBox("The text of the document uses Bookmarks:" + Chr(10) + sResult, MB_ICONINFORMATION, "Used Bookmarks")
    Else
        MsgBox("No Bookmarks are used in the text of the document", MB_ICONEXCLAMATION, "No Bookmarks")
    EndIf 
    
    sResult = ""
    For i = LBound(oBookmark) To UBound(oBookmark)
        If oBookmark(i)(1) = 0 Then
            sResult = sResult + oBookmark(i)(0) + ", "
        EndIf 
    Next i
    If Len(sResult) > 0 Then
        MsgBox("Bookmarks that are not used in the text of the document:" + Chr(10) + Left(sResult, Len(sResult)-2), MB_ICONINFORMATION, "Not Used Bookmarks")
    EndIf 
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多