Libreoffice宏基本:跳到下一段测试大写


1

我正在尝试写一个宏,我需要跳到下一段,在那里我将测试第一个字母的大小写。我花了几个小时,只发现不准确或难以遵循的文档,我觉得应该很简单。任何方向将不胜感激。到目前为止,我有:

SUB FIND_PARAGRAPHS

Dim vDescriptor
dim Doc as object
dim Replace as object 
dim oCursor 
dim Proceed as Boolean
dim CapTest as String

vDescriptor = ThisComponent.createSearchDescriptor()
doc = ThisComponent
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

' test para begin; if capital test previous end 

oCursor = Doc.Text.createTextCursor()
Do 
    oCursor.gotoNextParagraph(false) 'NW
    CapTest = oCursor.goRight(1, true) 'NW
    if CapTest = ucase(CapTest) Then goto TestPreviousEnd
Loop While CapTest

TestPreviousEnd:

END SUB

Answers:


0

有几个问题:

  • 向右走() 返回一个布尔值表示成功,而不是选中的字符串。
  • CapsTest 是一个字符串,而不是布尔值,因此它不能用作循环条件。
  • 你是怎么知道代码不工作的?也许你打算用 查看光标 ,这会导致可见光标移动。 (但是文本光标可能更好)。
  • 代码总是忽略第一段,这可能是有意的但似乎很奇怪。
  • 有许多未使用的变量,大小写不一致。

这是工作代码:

' Find the first paragraph in the document that begins with a capital letter.
Sub Find_Capitalized_Paragraph
    Dim oDoc As Object
    Dim oCursor As Object
    Dim Proceed As Boolean
    Dim CapTest As String

    oDoc = ThisComponent
    oCursor = oDoc.Text.createTextCursor()
    oCursor.gotoStart(False)
    Do 
        oCursor.goRight(1, True)
        CapTest = oCursor.getString()
        If CapTest <> "" And CapTest = UCase(CapTest) Then Goto TestPreviousEnd
        oCursor.gotoNextParagraph(False)
    Loop While CapTest <> ""
    MsgBox("No results.")
    Exit Sub

    TestPreviousEnd:
    MsgBox("Found result: """ & CapTest & """")
End Sub

因此,如果文件包含:

a
b
C
d

然后宏打印 Found result: "C"

一定要看看 Andrew Pitonyak的宏观文件 。它包含许多优秀的例子。


非常感谢您的详细分析。我稍后会检查并回来。
Paul B.

我已经检查了它,它工作正常,我从中学到了很多东西。点击第一段并不重要,因为我试图从不必要的换行中挑选出段落,第一段显然是段落。 (奇怪的是,我不能在没有绊倒“保存编辑”命令的情况下开始一个新的段落。)IAC,我可以使用它并在它上面构建我正在尝试做的事情。我发现文档很难遵循,包括你链接的资源,我已经拥有了。再次感谢,并且很好。
Paul B.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.