Alle Rechtschreibfehler markieren

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Alle Rechtschreibfehler markieren

Beitrag von komma4 »

Hast Glück - habe ein Makro, dass die von der Rechtschreibprüfung markierten ins Wörterbuch übernimmt und einen Kontrollliste erstellt...


habe das schnell mal geändert, sodass die unbekannten Wörter löscht.
Nutzung auf eigene Verantwortung - komm' mir hinterher nicht, dass Deine Texte weg sind :D

Verwendet wird zur Prüfung das Standard-Wörterbuch standard.dic. Im Code kann ein anderes eingestellt werden.

Code: Alles auswählen

Sub delUnknownWords
' ===============================================
' !!!
' Name des Wörterbuchs
' !!!
sWordBook = "standard.dic"
' ===============================================

sMakroName = "delUnknownWords"
sMakroVersion = "1.0.0"
sMakroTitel = _
 sMakroName & "-" & sMakroVersion

oDocModel = _
 StarDesktop.CurrentFrame.Controller.getModel()

If IsNull(oDocModel) Then
  ' Kein aktives Dokument
  MsgBox _
  "Kein aktives Dokument gefunden; beende Makro" ,_
  ,_
  sMakroTitel
  ' MsgBox("There's no active document")
  Exit Sub
End If

If Not HasUnoInterfaces ( _
 oDocModel, _
 "com.sun.star.text.XTextDocument") Then

 MsgBox _
 "Kein Textdokument; beende Makro" ,_
 ,_
 sMakroTitel
 ' MsgBox("This document doesn't support the 'XTextDocument' interface." + Chr(13))
 Exit Sub
End If

' service
oWBListe = _
 createUnoService ("com.sun.star.linguistic2.DictionaryList")

' Wörterbuch (WB)
' Name des Standards: standard.dic
oWB = _
 oWBListe.getDictionaryByName( sWordBook )

If IsNull( oWB ) Then
  ' Wörterbuch nicht gefunden
  MsgBox _
  "Wörterbuch " & sWordBook & " nicht gefunden; beende Makro" ,_
  ,_
  sMakroTitel
  ' MsgBox("There's no active document")
  Exit Sub
End If



oTextCursor = oDocModel.Text.createTextCursor()
oTextCursor.gotoStart(False)

oLinguSvcMgr = _
 createUnoService( _
 "com.sun.star.linguistic2.LinguServiceManager" _
 )

If Not IsNull(oLinguSvcMgr) Then
 oSpellChk = oLinguSvcMgr.getSpellChecker()
End If

If IsNull (oSpellChk) Then
 msgbox _
 "Zugriff auf Rechtschreibprüfung fehlgeschlagen; beende Makro",_
 ,_
 sMakroTitel
 ' MsgBox("It's not possible to access to the spellcheck." + Chr(13))
 Exit Sub
End If


' Schleife
Do
 ' Wort markieren
 If oTextCursor.isStartOfWord() Then
    oTextCursor.gotoEndOfWord(True)
    
    If Not isEmpty _
    (oTextCursor.getPropertyValue("CharLocale")) Then
     '
     If Not _
      oSpellChk.isValid(oTextCursor.getString(), _
      oTextCursor.getPropertyValue("CharLocale").Language, _
      aProp()) Then
         oTextCursor.setString( "" )
      End If
    End If
 End If

Loop While oTextCursor.gotoNextWord(False)

End Sub

Viel Erfolg damit!

OOoWiki:
Makros installieren
Makros mit einem Klick
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Alle Rechtschreibfehler markieren

Beitrag von komma4 »

Welche OOo Version?
Betriebssystem?
Welcher Dokumententyp? Ist die Rechtschreibprüfung aktiviert? Die Worte sind in Deutsch/Englisch/was geschrieben?
Wie rufst Du das Makro auf (nicht aus dem Basic-Editor wäre richtig)


Funktioniert hier wie gewünscht
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
hol.sten
******
Beiträge: 871
Registriert: Fr, 18.11.2005 21:21

Re: Alle Rechtschreibfehler markieren

Beitrag von hol.sten »

Lara hat geschrieben:Habe nun das Makro mit verschiedenen OO-Versionen probiert und mit verschiedenen Wörterbüchern. Ich erhalte immer die gleiche Fehlermeldung :(
Ich bekam die Fehlermeldung auch. Bei mir habe ich es unter Ubuntu mit LO 3.3.1 und mit OOo 3.2.0 probiert. Beide Mal der gleiche hier bereits gemeldete Fehler.

Die Analyse der Codezeile

Code: Alles auswählen

If Not oSpellChk.isValid(oTextCursor.getString(), oTextCursor.getPropertyValue("CharLocale").Language, aProp()) Then
hat bei mir gezeigt, dass OOo Basic es nicht mag, dass aProp() nicht definiert ist. Ich habe daher aProp() wie folgt definiert:

Code: Alles auswählen

Dim aProp() as new com.sun.star.beans.PropertyValue
Damit ist der Fehler weg und in meinem Textbeispiel wurden alle Worte, die rot unterkringelt waren, gelöscht.

Die Definition von aProp() habe ich als eigene Zeile hinter der Codezeile

Code: Alles auswählen

oTextCursor.gotoStart(False)
eingefügt. Aber man kann sie auch woanders im Code hinpacken, solange sie vor der ersten Verwendung von aProp() durchlaufen wird. Wie der Code ohne die Zeile laufen kann, verstehe ich nicht.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Alle Rechtschreibfehler markieren

Beitrag von komma4 »

Bei mir klappt es auch ohne die Definition*.

aprop() habe ich in diversen Makros der STANDARD Bibliothek definiert - allerdings mit DIM, nicht mit GLOBAL (oder so).

Die Erklärung von hol.sten ist einleuchtend - was mir aber nicht erklärt, warum es hier läuft.

Egal - Hauptsache bei Lara funktioniert es jetzt



*Gerade nochmal OOo neu gestartet, mein Testdokument (mit angehängtem Makro) geöffnet und Makro laufen lassen
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Antworten