La creazione di un progetto da zero in Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
Guide e Tutorials:indexed
Lavorare con gli oggetti Word (settima parte)

Premessa

Come già visto nelle lezioni precedenti, i requisiti fondamentali per poter interagire con gli oggetti di Word sono due: avere installato una copia di Microsoft Word ed aver precedentemente caricato la libreria oggetti di Word disponibile nella finestra di dialogo Riferimenti. Per una maggiore comprensione, la finestra si apre cliccando sulla voce Progetto del menu principale e selezionando dal menu Progetto che si aprirà, la voce Riferimenti che è quella accompagnata dall'icona dei libri. Basterà poi selezionare la voce Microsoft Word Object Library per poter utilizzare tutti gli oggetti di cui la libreria in questione si compone.


Eccoci alla settima lezione del corso di Visual Basic per Word. La volta scorsa abbiamo visto come individuare gli errori grammaticali di un testo inserito in una textbox. Come già vi sarete accorti, abbiamo usato un procedimento estremamente semplice ma altrettanto efficace: abbiamo riportato un testo scritto in un programma "fatto in casa", in un documento Word, e, utilizzando poi il procedimento inverso, abbiamo trasferito al programma i dati relativi agli errori individuati da Word nel documento di nuova creazione. Naturalmente, sarebbe possibile (e forse anche più semplice a livello di realizzazione) prendere il file contenente il dizionario utilizzato da Word e scrivere un programma con Visual Basic che dica: "per ogni parola che l'utente ha immesso nel testo, vado a controllare se è contenuta nel dizionario...". Tutto questo, come già detto, è possibile ma estremamente lungo da far elaborare ad un processore casalingo.
Quest'oggi quindi ci spingiamo leggermente più in là, andando a utilizzare nel nostro progetto la stessa finestra di dialogo che Word apre per eliminare o correggere l'errore grammaticale o ortografico contenuto in una parola. Ma cominciamo con ordine: il suggerimento è quello di sostituire il controllo textbox con un controllo richtextbox in modo da poter modificare a piacimento i tipi di caratteri del testo. Vogliamo infatti segnalare all'utente direttamente sul testo scritto le parole errate, sottolineandole o barrandole a seconda che presentino errori di grammatica o di ortografia. La modifica del controllo non porterà a grossi cambiamenti nel codice in quanto, seguendo il listato presentato alla fine della sesta lezione, basterà modificare l'istruzione:

Testo = Text1.Text

nella seguente istruzione:
Testo = RichTextBox1.Text

e con questa piccola modifica indolore, potremo proseguire col nostro intento di sottolineare le parole errate. Apriamo a questo punto una piccola parentesi. Mentre Word riconosce in modo automatico il numero di parole contenute in un testo, una semplice richtextbox non sa fare altrettanto, e perciò si limita a lavorare coi caratteri (questo significa che non esiste la proprietà word da poter utilizzare). Così ci dovremo adeguare, trasformando in caratteri le parole che ci interessano. Facciamo un esempio. La nostra applicazione riconosce un errore grammaticale nel testo:
Prima di nascere stavo meglio. e parecchio, anche!
Come si nota subito, dopo il primo punto, è d'obbligo la lettera maiuscola, che invece manca. Word ci dice subito che la parola errata è "e", ma la povera richtextbox non può ragionare in questi termini. Bisogna allora sommare tutti i caratteri scritti prima della parola. Questo numero ci darà l'indicazione della posizione del primo carattere della parola errata. Dichiariamo allora la variabile che rappresenta il totale dei caratteri fino alla parola errata inclusa:

Dim CaratteriFinora As Long

tale dichiarazione andrà inserita nelle dichiarazioni della sottoprocedura ControlloOrtografico. Fatto ciò dobbiamo rientrare all'interno del ciclo:

For i = 1 To NumeroParoleComplessive

e di seguito, ancora prima di individuare se l'errore è grammaticale o ortografico, dobbiamo calcolare i caratteri:

CaratteriFinora = CaratteriFinora + objDoc.ActiveWindow.Document.Words(i).Characters.Count

Ora individuiamo il caso in cui sia stato individuato un errore grammaticale, nella fattispecie:

...
If objDoc.ActiveWindow.Document.Words(i).GrammaticalErrors.Count >= 1 Then
...

Tra l'istruzione sopra e End If che chiude il ciclo, inseriamo queste tre lineee di codice:

RichTextBox1.SelStart = CaratteriFinora _
& - objDoc.ActiveWindow.Document.Words(i).Characters.Count
RichTextBox1.SelLength = objDoc.ActiveWindow.Document.Words(i).Characters.Count
RichTextBox1.SelUnderline = True

delle quali la prima ci dice che la sottolineatura deve iniziare dal numero di caratteri sommati fino alla parola grammaticalmente errata compresa, la seconda indica che la lunghezza della sottolineatura deve essere pari alla lunghezza della parola errata e la terza opera la sottolineatura vera e propria.

Una cosa simile può essere fatta anche per gli errori ortografici, usando l'accorgimento di modificare il tipo di segnalazione: se prima abbiamo utilizzato la sottolineatura, adesso individuiamo l'errore tramite una riga (la cosiddetta StrikeThru). Andiamo allora all'ipotesi in cui ci sia un errore ortografico:

...
If objDoc.ActiveWindow.Document.Words(i).SpellingErrors.Count >= 1 Then
...

e aggiungiamo le tre linee di codice:

RichTextBox1.SelStart = CaratteriFinora _
& - objDoc.ActiveWindow.Document.Words(i).Characters.Count
RichTextBox1.SelLength = objDoc.ActiveWindow.Document.Words(i).Characters.Count
RichTextBox1.SelStrikeThru = True

Adesso gli errori dovrebbero essere rilevati in modo distinto. Non sarà quindi più tanto utile la finestra di messaggio che elenca le parole errate. Per ora la terremo ancora buona, ma terminato il lavoro la elimineremo. Arriviamo finalmente all'apice della lezione ed alla fase forse più interessante: richiamiamo la stessa finestra di dialogo utilizzata da Word per eliminare o modificare le parole errate dal punto di vista grammaticale e/o ortografico. Basterà aggiungere questa linea:

objword.Dialogs.Item(wdDialogToolsSpellingAndGrammar).Show

di cui parleremo in maniera estesa la prossima lezione.
Riassumiamo velocemente il codice e concludiamo così la lezione:

'dichiarazioni di utilità generale
Dim Testo As String
Dim objDoc As Word.Document
Dim objWord As Word.Application
Option Explicit

Private Sub Command1_Click()
'seleziona l'intero documento
objDoc.ActiveWindow.Document.Select
'cancella tutta la selezione prima di assegnare un nuovo testo alla 'variabile
objDoc.ActiveWindow.Selection.Delete
'assegna il testo alla variabile
Testo = Text1.Text
'chiama la sottoprocedura ControlloOrtografico
ControlloOrtografico
End Sub
Private Sub Command2_Click()
'mostra o meno il documento Word per un controllo visivo
If Command2.Caption = "Word non visibile" Then
Command2.Caption = "Word visibile"
objWord.Visible = True
Else
Command2.Caption = "Word non visibile"
objWord.Visible = False
End If
End Sub

Private Sub Form_Load()
'imposta il nuovo oggetto Word e crea un nuovo documento
Set objWord = New Word.Application
objWord.Visible = False
Set objDoc = objWord.Documents.Add
End Sub
Public Sub ControlloOrtografico()
Dim ErroriOrtografici As Long
Dim ErroriGrammaticali As Long
Dim NumeroParoleComplessive As Long
Dim i As Integer
Dim ParoleErrateGramm As String
Dim ParoleErrateOrt As String
Dim CaratteriFinora As Long
'scrive sul documento il testo della RichTextBox
objDoc.ActiveWindow.Selection.TypeText Testo
'assegna alla variabile il numero di errori ortografici
ErroriOrtografici = objDoc.ActiveWindow.Document.SpellingErrors.Count
'assegna alla variabile il numero di errori grammaticali
ErroriGrammaticali = objDoc.ActiveWindow.Document.GrammaticalErrors.Count
'l'utente viene informato del numero di errrori presenti
MsgBox "Ci sono " & ErroriOrtografici & " errori ortografici e " _
& ErroriGrammaticali & " errori grammaticali"
NumeroParoleComplessive = objDoc.ActiveWindow.Document.Words.Count - 1
For i = 1 To NumeroParoleComplessive
CaratteriFinora = CaratteriFinora _
& + objDoc.ActiveWindow.Document.Words(i).Characters.Count
If objDoc.ActiveWindow.Document.Words(i).GrammaticalErrors.Count >= 1 Then
'Inseriamo anche uno spazio (vbcrlf) in modo che le parole errate vengano
'visualizzate in colonna
RichTextBox1.SelStart = CaratteriFinora _
& - objDoc.ActiveWindow.Document.Words(i).Characters.Count
RichTextBox1.SelLength = objDoc.ActiveWindow.Document.Words(i).Characters.Count RichTextBox1.SelUnderline = True
ParoleErrateGramm = ParoleErrateGramm _
& vbcrlf & objDoc.ActiveWindow.Document.Words(i)
End If
If objDoc.ActiveWindow.Document.Words(i).SpellingErrors.Count >= 1 Then
RichTextBox1.SelStart = CaratteriFinora _
& - objDoc.ActiveWindow.Document.Words(i).Characters.Count RichTextBox1.SelLength = objDoc.ActiveWindow.Document.Words(i).Characters.Count RichTextBox1.SelStrikeThru = True
ParoleErrateOrt = ParoleErrateOrt & vbcrlf _
& objDoc.ActiveWindow.Document.Words(i)
End If
Next i
MsgBox "Le parole grammaticalmente errate sono: " & ParoleErrateGramm _
& VbCrlf & "Le parole ortograficamente errate sono:" & ParoleErrateOrt
End Sub
Private Sub Form_Unload(Cancel As Integer)
'chiude il documento senza salvarlo
objDoc.ActiveWindow.Close (False)
'chiude Word senza salvare nulla
objWord.Quit (False)
End Sub


Anche stavolta l'esempio da scaricare non c'è poichè i controlli presenti sulla form sono gli stessi. Basterà quindi copiare e incollare il listato qui sopra per aggiornare l'applicazione.


Alla prossima lezione, allora!

Archivio:
Lezioni Commenta questa lezione Invia la tua guida Avviso per le nuove lezioni
Proponi un argomento

Visual Basic Italia© copyright 2000 - tutti i diritti riservati
E-mail:
vbitalia@libero.it