Dienstag, 15. Juli 2008

Rechtschreibkorrektur über Word / Spellchecking with Word

Wenn wir dem Anwender die Möglichkeit geben, innerhalb unserer Applikation Texte zu erfassen, die über ein paar Worte hinausgehen, dann wäre es ganz praktisch, diese erfassten Daten, auf Anfrage, einer Rechtschreibprüfung zu unterziehen.

Ist auf dem Kundensystem Word installiert, so stellt sich diese Option als leicht realisierbar dar. Der folgende Beispielcode greift auf eine Funktion zu, die ich bereits in einem früheren Posting veröffentlicht habe. Dort ging es um die Prüfung der aktuellen Word Version.

Um die neue Funktion nutzen zu können, sollte der Code aus dem o.a. Posting somit ebenfalls als Funktion verfügbar sein. Sie stellt bei einer gültigen Word-Version innerhalb des _screen Objektes eine Referenz auf das erzeugte Word Objekt bereit (_screen.oWord)


* // Die Funktion SpellCheck verarbeitet entweder einen übergebenen Parameterstring       
* // oder, falls kein Wert übergeben wird, den Inhalt der Zwischenablage               
FUNCTION SpellCheck
LPARAMETERS vText as String

   LOCAL lcSource as String, loDoc AS Word.Document

   DO CASE
   CASE VARTYPE(m.vText) = [C]
       lcSource = m.vText
   CASE EMPTY(lcSource) AND !EMPTY(_CLIPTEXT)
       lcSource = _CLIPTEXT
   ENDCASE
  
   * // Wenn Source gefüllt ist und Word geladen werden konnte, dann kann es losgehen   
   IF !EMPTY(lcSource) AND LoadWord() > 0

       * // Neues leeres Worddokument erzeugen                                           
       loDoc                    = _screen.oWord.Documents.Add(,,1,.T.)
      
       * // Das neue leere Worddokument mit dem zu prüfenden Text füllen               
       loDoc.Content.Text        = lcSource
      
       * // Rechtschreibkorrektur anwerfen                                               
       * // Wenn Rechtschreibfehler vermutet werden öffnet sich das Korrekturfenster   
       loDoc.CheckSpelling()
      
       * // Jetzt steht im Worddokument der korrigierte Text, den wir unserer            
       * // Arbeitsvariablen bzw. Ziel-Property zuweisen                               
       lcSource                = loDoc.Content.Text
      
       * // Sicherstellen, das Word weiterhin unsichtbar bleibt                       
       _screen.oWord.Visible    = .F.
      
       * // Das zuvor erzeugte Worddokument schliessen,                                
       * // ohne dass eine Sicherheitsabfrage aufpoppt                                   
       loDoc.Close(.F.)
      
       * // Die nicht mehr benötigte Referenzvariable nullen                           
       loDoc                    = .NULL.
      
       * // Word schliessen ohne das eine Abfrage aufpoppt                               
       _screen.oWord.Quit(.F.)
      
       * // Referenzproperty nullen                                                   
       _screen.oWord            = .NULL.
      
       RELEASE loDoc
      
   ENDIF
  
   RETURN lcSource
  
ENDFUNC

Anmerkung: Diese Funktion wurde nicht unter der Version 2007 getestet, da mir diese derzeit nicht zur Verfügung steht.

Keine Kommentare:

Kommentar veröffentlichen