Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

VSTO 2008: un assaggio tra Word 2007 e Visual Basic 2008

Microsoft Visual Studio 2008 Tools for Office consente agli sviluppatori di mettere a frutto le proprie conoscenze nell’ambito della programmazione .NET anche nell’ambito dello sviluppo orientato a Microsoft Office 2007.

 

Grazie a questo engine, integrato in Visual Studio 2008 (ad eccezione delle edizioni Express) e a tutta una serie di modelli di progetto specifici, è possibile interagire da codice managed con le applicazioni della suite di Office 2007, creando componenti aggiuntivi, integrando funzionalità nel Ribbon (la parte dell’interfaccia che sostituisce le vecchie barre dei menu e degli strumenti), gestendo in modo potente e flessibile i vari tipi di documento.

Con riferimento ai documenti di Office 2007, Visual Studio 2008 Tools for Office (noto anche come VSTO) permette di intervenire sui documenti in formato Open XML, introdotto per la prima volta proprio dall’ultima release di Office stesso. In questo post ci proponiamo un assaggio di cosa sia possibile fare. Si tratta di un assaggio proprio perché le possibilità di sviluppo sono estremamente vaste. Ci occuperemo, mediante un apposito progetto scritto in Visual Basic 2008, di aggiungere alcune funzionalità ad un documento di Word 2007. Questo tipo di operazione può essere fatto sia su documenti esistenti che nuovi e addirittura sui modelli.

 

In primo luogo, aprite Visual Studio 2008 e avviate la creazione di un nuovo progetto nel modo consueto. Nella finestra New Project, espandete la cartella denominata Office e selezionate il modello di progetto denominato Word 2007 Document, come in figura:

 

 

Come potete facilmente osservare,  i modelli di progetto a disposizione sono numerosi e riguardano un gran numero di applicazioni appartenenti a Office 2007.

Verrà poi richiesto di specificare il documento da utilizzare, se uno vuoto oppure uno esistente. Supponiamo di avere a disposizione un file .docx esistente, nel mio caso Frame.docx che contiene il testo di un precedente post. La finestra si presenta così:

 

 

Una volta che la creazione del progetto è terminata, potrete notare come nell’IDE di Visual Studio 2008 venga integrata l’interfaccia di Word 2007, che contiene il nostro documento. Sulla sinistra, invece, avrete a disposizione la consueta toolbox che permetterà di aggiungere alcuni controlli Windows Forms direttamente sul documento. Ciò è possibile poiché le applicazioni di Office 2007 implementano uno specifico host per questo tipo di controlli. A questo punto, trascinate sul documento una Label, due Button e un controllo WebBrowser. La figura seguente mostra l’aggiunta dei primi tre controlli, come evidenziato dai cerchi rosso e verde, mentre il WebBrowser è stato aggiunto in fondo al documento:

 

 

E’ importante notare che nel documento è presente una revisione, evidenziata in rosso, della quale scopriremo l’importanza tra breve.

 

Ora, tramite la finestra Solution Explorer, passiamo a visualizzare il codice che interverrà sul documento. Possiamo paragonare questa operazione alla logica dei file di code-behind che già conosciamo per WPF o ASP.NET. Si tratta, in sostanza, di aprire il file ThisDocument.vb. Questo file implementa la classe ThisDocument, che rappresenta il documento in esame. Molto importante è anche l’oggetto Application (namespace Microsoft.Office.Interop.Word) che rappresenta l’applicazione Word.

Il file di codice espone due gestori, per gli eventi Startup e Shutddown. I nomi sono piuttosto intuitivi e si verificano, rispettivamente, all’apertura e alla chiusura del documento.  Se siete stati attenti, avete sicuramente notato che l’IDE aggiunge automaticamente un file .pfx al progetto, quindi una firma digitale. Possiamo, quindi, scrivere codice che verifichi l’effettiva esistenza di una firma digitale all’interno del documento. Pertanto, all’interno dell’evento Startup scriviamo quanto segue:

 

    Private Sub ThisDocument_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup

 

        'l'IDE aggiunge un file .pfx, che rappresenta una firma digitale. Ne verifichiamo

        'l'effettiv esistenza

        If Me.VBASigned = True Then

            MessageBox.Show("Il documento contiene una firma digitale", "", MessageBoxButtons.OK, MessageBoxIcon.Information)

        End If

    End Sub

 

L’oggetto Me, in questo caso, indica l’istanza attiva del documento. La proprietà VBASigned ci consente di sapere se un documento è firmato. In caso affermativo, viene mostrato un messaggio. A tal proposito è opportuno precisare che la classe MessageBox è quella che appartiene a Windows Forms.

 

Ora, andiamo a scrivere codice per aprire il sito Web di MSDN all’interno del WebBrowser aggiunto in precedenza. Questa azione deve essere intrapresa nel momento in cui l’utente fa clic sul pulsante che abbiamo aggiunto vicino all’URL e il codice che la esegue è semplicemente il seguente:

 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        WebBrowser1.Navigate("http://msdn.microsoft.com")

    End Sub

 

Ora passiamo ad elencare le revisioni presenti nel documento. Quindi, chiederemo all’utente se vuole accettarle o rifiutarle. Le revisioni in un documento Word sono contenute nella collezione Revisions. Questa collezione contiene oggetti Revision e può essere ciclata per ottenere le singole revisioni. Implementeremo, quindi, un ciclo For..Each per determinare l’elenco delle revisioni. Poiché si tratta di un mero esempio didattico, contenente un’unica revisione, memorizzeremo l’elenco in una singola stringa. Nel momento in cui l’utente fa clic sul pulsante che abbiamo predisposto per le revisioni, deve essere eseguito il seguente codice:

 

    Private Sub revButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles revButton.Click

 

        'qui torna utile la Local Type Inference

        Dim allRevisions = Me.Revisions

 

        Dim revisionsList As String = Nothing

 

        'ottiene una collection di revisioni nel documento

        'e per ogni revisione concatena alcune proprietà in una stringa

        For Each revision As Revision In allRevisions

            revisionsList += String.Concat(revision.Author, ", ", revision.Date.ToString, ", ", revision.Range.Text, Environment.NewLine)

        Next

 

        'mostra le revisioni ottenute e chiede se si vuole accettarle o rifiutarle

        Dim result As DialogResult

        result = MessageBox.Show(String.Concat("Il documento contiene le seguenti revisioni: ", Environment.NewLine, revisionsList, _

                                               "Accettare le revisioni?"), "", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)

 

        If result = DialogResult.Yes Then

            allRevisions.AcceptAll()    'accetta tutte le revisioni

        ElseIf result = DialogResult.No Then

            allRevisions.RejectAll()    'rifiuta tutte le revisioni

        ElseIf result = DialogResult.Cancel Then

            Exit Sub

        End If

    End Sub

 

Il codice ha il seguente output:

 

 

A seconda della scelta dell’utente, le revisioni vengono accettate o rifiutate in blocco (AcceptAll e RejectAll) ma in realtà è possibile accettare o rifiutare anche singole revisioni.

 

Salvate il lavoro. Se ora provate ad aprire il documento direttamente in Word, senza passare da Visual Studio, noterete come siano funzionanti tutte le nostre modifiche fatte via codice. Ad esempio, se provate a fare clic sul pulsante relativo alla navigazione del sito MSDN, il risultato sarà il seguente:

 

 

Come detto, questo è solo un piccolo esempio didattico. In realtà, grazie a Visual Studio 2008 e VSTO, è possibile avere un controllo pressoché completo sui documenti di Office utilizzando i nostri linguaggi di programmazione preferiti.

 

Alessandro

Print | posted on martedì 19 febbraio 2008 18:35 | Filed Under [ Visual Studio Tools for Office ]

Powered by:
Powered By Subtext Powered By ASP.NET