Libreoffice マクロ基本: 次の段落にスキップして大文字をテストする

Libreoffice マクロ基本: 次の段落にスキップして大文字をテストする

マクロを書こうとしているのですが、次の段落に進んで最初の文字が大文字になっているかテストする必要があります。何時間もかけて調べましたが、単純なはずのドキュメントが不正確だったりわかりにくいものしか見つかりませんでした。どんな指示でもいただければ幸いです。これまでのところ、次のことがわかりました。

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

答え1

いくつかの問題があります:

  • 右に行って()選択された文字列ではなく、成功を示すブール値を返します。
  • 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 のマクロドキュメント優れた例文が多数掲載されています。

関連情報