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 (sesta 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.


Salve a tutti e bentornati all'appuntamento con Visual Basic per Word. Riassumiamo brevemente ciò che abbiamo concluso la lezione scorsa. E' stato visto come applicare il "motore grammaticale" presente in Word a semplici caselle di testo, indifferentemente TextBox o Richtextbox, permettendo così all'utente di essere informato alla pressione di un pulsante degli eventuali errori ortografici e/o grammaticali presenti nel testo da lui inserito. Probabilmente molti di coloro che hanno scaricato o applicato ad un proprio progetto l'esemio dell'ultima lezione, immettendo nella casella di testo ad esempio la frase:
ciao mamma butta la pasta che oggi torno presto
si saranno visti apparire sullo schermo la finestra di messaggio che diceva:
Ci sono 0 errori ortografici e 1 errori grammaticali
Com'è possibile questo se la frase è scritta correttamente? Semplicemente perchè mentre l'errore ortografico si ha quando si sbaglia a scrivere una parola (ad esempio: mammmma invece di mamma), l'errore grammaticale si ha quando non si rispettano le regole della grammatica della lingua utilizzata (ad esempio: ciao mamma butta la paste...), utilizzando cioè un plurale dove necessiterebbe il singolare e così via. In definitiva l'errore causato dalla frase "ciao mamma butta la pasta che oggi torno presto" deriva semplicemente dal fatto di non aver utilizzato la maiuscola all'inizio della frase. Provate così:
Ciao mamma butta la pasta che oggi torno presto
Vi sarà ritornato:
Ci sono 0 errori ortografici e 0 errori grammaticali
Quindi state attenti a non sottovalutare la vostra piccola Textbox in quanto la revisione grammaticale che si applica ad essa è veramente potente.

Bene, adesso entriamo nel vivo della lezione. Cosa c'interessa adesso che sappiamo quanti errori sono presenti nel testo? Un'ottima idea sarebbe quella di individuare la parola errata.
Partiamo allora a considerare gli errori grammaticali. Una parola grammaticalmente scorretta sarà quella parola nella quale sia stato rilevati un numero di errori di grammatica maggiori o uguali (>=) ad uno. Applichiamo questo concetto di logica al nostro caso:

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

dove chiaramente la dicitura **IndiceParola** andrà sostituita col numero che indica la posizione della parola all'interno di tutto il documento Word. A questo punto non possiamo far altro che creare un iterazione, ossia prendere tutto il testo del documento e per ogni sua singola parola far individuare all'applicazione la presenza o meno di errori grammaticali. Per far questo avremo bisogno del numero indicatore delle parole complessive rilevate nel testo. Assegnamo tale valore ad esempio alla variabile NumeroParoleComplessive:

Dim NumeroParoleComplessive As Long
NumeroParoleComplessive = objDoc.ActiveWindow.Document.Words.Count - 1

Adesso NumeroParoleComplessive ci dirà di quante parole si compone il testo.
Ora processiamo ogni singola parola con la funzione che abbiamo visto in precedenza. Vogliamo visualizzare una seconda finestra di messaggio che, una volta processate tutte le parole, ci elenchi le parole grammaticalmente scorrette. Inseriamo allora tutte le parole errate in una stringa di testo ParoleErrateGramm che verrà visualizzata solamente alla fine:

Dim NumeroParoleComplessive As Long
Dim i As Integer
Dim ParoleErrateGramm As String
NumeroParoleComplessive = objDoc.ActiveWindow.Document.Words.Count - 1
For i = 1 To NumeroParoleComplessive
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
ParoleErrateGramm = ParoleErrateGramm & vbcrlf & objDoc.ActiveWindow.Document.Words(i)
End If
Next i
MsgBox ParoleErrateGramm

Il codice sopra esposto non ha senso se non viene associato al programma che abbiamo sviluppato la volta scorsa. Includendo il nuovo listato a quello già visto, ecco come apparirà il codice completo finora (nota: il nuovo codice è compreso tra due linee di asterischi):

'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
'scrive sul documento il testo della TextBox
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"
'*********************************************************************
Dim NumeroParoleComplessive As Long
Dim i As Integer
Dim ParoleErrateGramm As String
NumeroParoleComplessive = objDoc.ActiveWindow.Document.Words.Count - 1
For i = 1 To NumeroParoleComplessive
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
ParoleErrateGramm = ParoleErrateGramm & vbcrlf _
& objDoc.ActiveWindow.Document.Words(i)
End If
Next i
MsgBox "Le parole errate sono:" & vbcrlf & ParoleErrateGramm
'*********************************************************************
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

Fatto questo facciamo un piccolo esempietto per verificare il corretto funzionamento del codice. Diamo l'avvio al programma e scriviamo all'interno della TextBox1 la seguente frase:
la rana. in spagna gracida in campagna
Ad occhio quanti errori grammaticali ci sono? Due: la minuscolo all'inizio di una frase e "in" minuscolo preceduto da un punto. A questo punto la nostra applicazione dovrebbe darci i messaggi:
ci sono 1 errori ortografici e 2 errori grammaticali
ed al termine del processo:
Le parole errate sono:
la
in
Tutto a posto, dunque. E' quindi giunto il momento di applicare lo stesso procedimento agli errori ortografici. Vediamo in breve come fare. Una parola ortograficamente scorretta sarà quella parola nella quale sia stato rilevati un numero di errori di ortografia maggiori o uguali (>=) ad uno:

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

dove anche questa volta la dicitura **IndiceParola** andrà sostituita col numero che indica la posizione della parola all'interno di tutto il documento Word. Utilizzando anche in questo caso il numero totale di parole incluse nel testo, dato dalla variabile NumeroParoleComplessive, inseriamo nel ciclo For che abbiamo visto prima, anche queste linee di codice che similmente agli errori grammaticali, processeranno gli errori ortografici (nota: il nuovo codice è inserito tra due linee di asterischi):

Dim NumeroParoleComplessive As Long
Dim i As Integer
Dim ParoleErrateGramm As String
'*********************************************************************
Dim ParoleErrateOrt As String
'*********************************************************************
NumeroParoleComplessive = objDoc.ActiveWindow.Document.Words.Count - 1
For i = 1 To NumeroParoleComplessive
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
ParoleErrateGramm = ParoleErrateGramm _
& vbcrlf & objDoc.ActiveWindow.Document.Words(i)
End If
'*********************************************************************
If objDoc.ActiveWindow.Document.Words(i).SpellingErrors.Count >= 1 Then
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

A questo punto testiamo il programma nuovamente con la stessa frase di prima:
la rana. in spagna gracida in campagna
Dopo il solito messaggio che indica la presenza di un errore ortografico e due grammaticali, il secondo messaggio ritornerà:
Le parole grammaticalmente errate sono:
la
in
Le parole ortograficamente errate sono:
spagna

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
'scrive sul documento il testo della TextBox
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
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
ParoleErrateGramm = ParoleErrateGramm _
& vbcrlf & objDoc.ActiveWindow.Document.Words(i)
End If
If objDoc.ActiveWindow.Document.Words(i).SpellingErrors.Count >= 1 Then
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


L'esempio da scaricare questa volta non c'è poichè i controlli presenti sulla form sono gli stessi. Basterà quindi copiare e incollare il listato qui sopra per aggiornare l'applicazione.
Inoltre volevamo scusarci per non aver trattato nella presente lezione l'argomento 'apertura della finestra di dialogo Ortografia e Grammatica' ma avrebbe reso la lezione troppo pesante. Promettiamo comunque trattare l'argomento nel corso della prossima guida o al massimo in quella ad essa successiva,


Alla prossima lezione e auguri di buone feste a tutti.

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