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


Continuiamo la trattazione sull'argomento 'inserimento di caratteri in un documento'. Come già abbiamo visto è possibile scrivere su un documento il testo che desideriamo, sia che esso sia composto da una frase, sia che sia composto da un singolo carattere (alfanumerico o simbolico). Dando per scontate le procedure che abbiamo seguito per fare ciò, vediamo adesso come trarre le informazioni che il nostro nuovo (o pre-salvato) documento ci offre.
Innanzitutto, per completare il documento assegnamogli un nome, proprio come si fa alla form di un progetto scritto in Visual Basic. E' importante notare a riguardo che tale nome non sarà considerato da Word come il nome col quale salvare il documento: è più che altro una sorta di nota visibile nella barra superiore della pagina Word.
Perciò nel momento in cui si andrà a salvare la pagina, Word ci chiederà in ogni caso di impostare il nome (se non si è già provveduto da codice). Il tutto si concretizza ad ogni modo con l'utilizzo di Caption, proprio come accade in Visual Basic. Se allora vogliamo chiamare il documento 'Il mio nuovo documento di dubbia utilità' ci basterà aggiungere questa breve linea di codice:

objDoc.ActiveWindow.Caption = "Il mio nuovo documento di dubbia utilità"

e controllare sulla barra superiore del documento (quella di colore blu), se effettivamente la pagina appena creata ha assunto tale nome.
Adesso che abbiamo visto quest'aspetto a dire la verità abbastanza marginale, passiamo alla lezione vera e propria. E' infatti possibile, una volta inserito un testo o una serie di caratteri all'interno di un documento, controllare quanti siano i caratteri presenti nel documento. Per fare ciò utilizziamo Count riferito a Characters che abbiamo già studiato nella lezione precedente. L'utilizzo di Characters.Count è davvero molto semplice:

'si può assegnare ad una TextBox il numero di caratteri del documento
Text1.Text = objDoc.ActiveWindow.Document.Characters.Count
'oppure ad una variabile, ad esempio NumeroDiCaratteri
NumeroDiCaratteri = objDoc.ActiveWindow.Document.Characters.Count

Nel codice seguente riportiamo tutto il necessario per aprire una nuova pagina Word ed aggiungiamo una TextBox alla form. Tale comando ci mostrerà quanti caratteri sono presenti nella pagina:

Private Sub Form_Load()
Dim objDoc As Word.Document
Dim objWord As Word.Application
Set objword = New Word.Application
objword.Visible = True
Set objDoc = objword.Documents.Add
objDoc.Activate
objDoc.ActiveWindow.Selection.TypeText "Questo " _
& "pare essere il mio testo"
Text1.Text = objDoc.ActiveWindow.Document.Characters.Count
End Sub

Se si è fatto girare il programmino, si scoprirà che nel documento ci sono 32 caratteri. Naturalmente le possibilità associate a Characters non sono terminate. Ciò che è stato trattato riguardo l'intero documento può essere molto semplicemente trasferito a livello di selezione. Se si vuole infatti contare il numero di caratteri presenti in una frase da noi scelta tra quelle già presenti in un testo:

'si può assegnare ad una TextBox il numero di caratteri della selezione
Text1.Text = objDoc.ActiveWindow.Selection.Characters.Count
'oppure ad una variabile, ad esempio NumeroDiCaratteri
NumeroDiCaratteri = objDoc.ActiveWindow.Selection.Characters.Count

Ma non è ancora finita qui. Sia per l'intero documento che per la selezione possiamo individuare il primo e l'ultimo carattere:

'individua il primo carattere di una parte del testo da noi selezionata
Text1.Text = objDoc.ActiveWindow.Selection.Characters.First
'individua l'ultimo carattere di una parte del testo da noi selezionata
Text1.Text = objDoc.ActiveWindow.Selection.Characters.Last
'individua il primo carattere del testo di un documento
Text1.Text = objDoc.ActiveWindow.Document.Characters.First
'individua l'ultimo carattere del testo di un documento
Text1.Text = objDoc.ActiveWindow.Document.Characters.Last

Bene, adesso come promesso nel corso della quarta lezione, passiamo ad un argomento un po' più particolare e forse anche più interessante: la revisione grammaticale. Se necessitiamo infatti di un controllo grammaticale sul testo basterà aggiungere dove vogliamo questa linea di codice:

objDoc.ActiveWindow.Document.CheckGrammar

A questo punto nel caso Word individui un errore nel testo aprirà la finsestra di dialogo 'Ortografia e grammatica' con tutti i consigli relativi all'utilizzo del vocabolario. E' anche possibile impostare il controllo grammaticale a parte, con l'indicazione dei vocabolari da utilizzare (quello interno a Word più eventualmente quelli da voi creati). Ecco come si presenta la revisione ortografica:

objDoc.ActiveWindow.Document.CheckSpelling

In realtà i parametri opzionali che si possono impostare con CheckSpelling come visto sono molteplici. Ecco qui l'elenco completo:

CustomDictionary è il dizionario personale principale o uno precompilato a cui si vuole che Word faccia riferimento. Questo equivale ad andare nel menu Strumenti/Opzioni/Ortografia e Grammatica e premere sul tasto Dizionari per impostarne uno o più aggiuntivi.
IgnoreUppercase Dà la possibilità di ignorare nel controllo grammaticale la presenza o meno di lettere maiuscole, considerando tutti i caratteri allo stesso modo.
AlwaysSuggest Definisce se nel controllo ortografico Word deve consigliare sinonimi o parole comunque connesse a quella per la quale si è verificato l'errore
CustomDictionary1
CustomDictionary2
CustomDictionary3
CustomDictionary4
CustomDictionary5
CustomDictionary6
CustomDictionary7
CustomDictionary8
CustomDictionary9
CustomDictionary10
Puntano ai dizionari personali o precompilati aggiuntivi ai quali Word deve fare riferimento nel controllo grammaticale.

Naturalmente questa procedura di controllo ortografico e/o grammaticale possono risultare noiosi ed inutili per alcuni. E'allora possibile ignorare tutti gli errori di ortografia:

objDoc.ActiveWindow.Document.ShowSpellingErrors = False

e quelli di grammatica:

objDoc.ActiveWindow.Document.ShowGrammaticalErrors = False

naturalmente con la possibilità in ogni momento di convertire questa specie di 'Ignora Tutto' nei confronti della grammatica, semplicemente impostando ShowSpellingErrors e ShowGrammaticalErrors entrambi (o a scelta uno solo di essi) su True. Inoltre è possibile assegnare ad una variabile o ad una TextBox il valore rappresentato dal numero di errori ortografici e/o grammaticali presenti nel testo (cosa che non può essere fatta all'interno di una semplice selezione):

Text1.Text = objDoc.ActiveWindow.Document.SpellingErrors.Count

assegna al controllo TextBox1 il numero di errori ortografici presenti, mentre:

NumeroDiErrori = objDoc.ActiveWindow.Document.SpellingErrors.Count

assegna alla variabile NumeroDiErrori (naturalmente una variabile da dichiarare As Integer) il numero di errori ortografici presenti nel testo. Per concludere non ci rimane altro da fare che individuare se un errore è di grammatica o di ortografia. Includendo nel programma questa linea di codice, la TextBox1 ci dirà se l'errore è ortografico (se viene ritornato True) o grammaticale (se viene ritornato False):

Text1.Text = objDoc.ActiveWindow.Document.SpellingErrors.Type = wdSpellingError

La cosa può essere vista anche dal lato opposto, dicendo al programma che probabilmente ci si troverà dinnanzi ad un errore grammaticale. In tal caso se l'errore è ortografico la TextBox ritornerà False mentre se è grammaticale ritornerà True:

Text1.Text = objDoc.ActiveWindow.Document.GrammaticalErrors.Type = wdGrammaticalError

Eccoci finalmente alla chicca finale. Una ventina di linee di codice e potrete aggiungere ai vostri progetti sia che siano editors di testo, sia che siano applicazioni che hanno un minimo a che fare con il testo, lo stesso controllo grammaticale di Word. Quest'oggi vedremo solo un abbozzo di questo programma nel quale andremo a rilevare il numero di errori grammaticali e ortografici di un testo contenuto all'interno di una textbox. Nella prossima lezione si vedrà invece come richiamare la finestra di dialogo di Word per trovare sinonimi e sostituirli alle parole errate.

'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"
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

Ecco fatto. L'esempio è terminato. Chi volesse dare un'occhiata all'esempio in formato .zip di cui abbiamo un'immagine qui sotto. Visto che ancora non abbiamo impostato il codice per il riconoscimento delle singole parole errate, la finestra di errore indica la presenza di due errori ortografico-grammaticali ossia "textbox" ed "editors" che nella lingua italiana non sono compresi e non sono stati inclusi in alcun dizionario personalizzato.


Per scaricare l'esempio premere qui


Arrivederci alla prossima lezione

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