Базовый макрос Libreoffice: переход к следующему пункту теста для верхнего регистра

375
Paul B.

Я пытаюсь написать макрос, и мне нужно перейти к следующему абзацу, где я проверю первую букву на заглавную. Я провел часы и нашел только неточную или трудную для следования документацию для чего-то, что я думаю, должно быть простым. Любое направление будет оценено. Пока что у меня есть:

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

1 ответ на вопрос

0
Jim K

There are several problems:

  • goRight() returns a boolean to indicate success, not the selected string.
  • CapsTest is a string, not a boolean, so it cannot be used as the loop condition.
  • How did you know the code wasn't working? Perhaps you intended to use the view cursor, which would cause the visible cursor to move. (However a text cursor is probably better).
  • The code always ignores the first paragraph, which may be intentional but seems strange.
  • There are a lot of unused variables, and the capitalization is inconsistent.

Here is working code:

' 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 

So if the document contains:

a b C d 

Then the macro prints Found result: "C".

Be sure to check out Andrew Pitonyak's macro document. It contains many excellent examples.

Большое спасибо за этот подробный анализ. Я рассмотрю это позже и вернусь. Paul B. 8 лет назад 0
Я проверил это, и оно работает нормально, и я многому научился из этого. Удар по первому абзацу не важен, так как я пытаюсь выделить абзацы из ненужных перевода строки, и первый абзац, очевидно, является абзацем. (Странно, я не могу начать новый пункт здесь, не отключив команду «Сохранить изменения».) IAC, я могу использовать это и опираться на то, что я пытаюсь сделать. Мне было очень трудно следить за документацией, включая ресурс, на который вы ссылались, который у меня уже был. Еще раз спасибо и будет хорошо. Paul B. 8 лет назад 0

Похожие вопросы