Web Analytics Word Custom Ribbon: modifica stile - Blog di Laura Ciccarese

Blog di Laura Ciccarese

Office: un mondo da scoprire! Approfondimenti, Automation, VBA e altro ancora...

Word Custom Ribbon: modifica stile

Oggi vediamo un primo esempio sulla personalizzazione del Ribbon di Word 2007, con la creazione di una scheda aggiuntiva contenente, per il momento, un comando che modifica lo stile Titolo 1 nell'intero documento.

Le operazioni da eseguire sono molto simili a quelle già eseguite per Excel e descritte nei post precedenti, che riassumo sinteticamente:

  • aprire Visual Studio 2007 e creare un Word addin (in C# o Visual Basic);
  • aggiungere un item di tipo RibbonSupport che creerà la classe Ribbon1.cs (Ribbon1.vb per visual basic) e il file di struttura Ribbon1.xml (comune ad entrambi i linguaggi);
  • sostituire la struttura del Ribbon1.xml con la seguente:

Ribbon1.xml

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="OnLoad">

<ribbon startFromScratch ="false">

<tabs>

<tab id="MenùAzienda"

label="Menù aziendale VB">

<group id="FormatoCarattere"

label="Formati carattere">

<button id ="FormattaTitolo1"

size ="normal"

label ="Formatta Titolo 1"

screentip ="Formatta il testo con stile Titolo 1"

supertip ="Porta lo stile Titolo 1 a 16 punti,carattere Arial Black, grassetto e corsivo"

onAction = "myFunctions"

imageMso ="ChangeStylesMenu"/>

</group>

</tab>

<tab idMso ="TabHome">

<group idMso="GroupFont" >

<comboBox idMso ="fontSize" visible ="false"/>

</group>

</tab>

</tabs>

</ribbon>

</customUI>

  • attivare il codice commentato (indicato con il commento TODO), nella classe Ribbon1.cs (e analogamente nella classe Ribbon1.vb)
  • aggiungere la callback myFunctions nella regione delle callbacks del file Ribbon1.cs (e Ribbon1.vb):

C#

#region Ribbon Callbacks

public void MyFunctions(Office.IRibbonControl control)

{

//chiamata alle diverse funzioni corrispondenti ai diversi comandi del ribbon

//attualmente esiste un solo comandoswitch (control.Id)

switch(control.Id)

{

case "FormattaTitolo1":

Globals.ThisAddIn.FormattaTitolo1();

break;

default:

// aggiungere codice per altre funzioni

break;

}

}

#endregion

VB

#Region "Ribbon Callbacks"

Public Sub myFunctions(ByVal control As Office.IRibbonControl)

'chiamata alle diverse funzioni corrispondenti ai diversi comandi del ribbon

'attualmente esiste un solo comando

Select Case control.Id

Case "FormattaTitolo1"

Globals.ThisAddIn.FormattaTitolo1()

Case Else

'aggiungere codice per altre funzioni

End Select

End Sub

#End Region

  • creare il metodo per l'esecuzione della funzionalità nella classe ThisAddin.cs (ThisAddin.vb per Visual Basic):

C#

public void FormattaTitolo1()

{

try

{

//impostiamo la variabile per il documento attivo

Word.Document myDoc = Application.ActiveDocument;

//impostiamo la variabile oggetto per passare il nome dello stile

object styleName = "Titolo 1";

//impostiamo la variabile per lo stile Titolo 1

Word.Style myStyle = myDoc.Styles.get_Item(ref styleName);

//impostiamo la variabile booleana

Boolean updAutom = false;

//rileviamo l'impostazione della proprietà "aggiorna automaticamente" dello stile Titolo 1

//in modo da poterla impostare a true prima di effettuare le modifiche

//e poterla poi riportare al valore precedente al termine delle modifiche

updAutom = myStyle.AutomaticallyUpdate;

//impostiamo a true l'aggiornamento automatico

myStyle.AutomaticallyUpdate.Equals(true);

//apportiamo le modifiche necessarie allo stile Titolo 1

myStyle.Font.Size = 22;

myStyle.Font.Name = "Tahoma";

myStyle.Font.Color = Word.WdColor.wdColorDarkRed;

myStyle.Font.Bold = 1;

myStyle.Font.Italic = 0;

//assegnamo un bordo inferiore al paragrafo

myStyle.ParagraphFormat.Borders[Word.WdBorderType.wdBorderBottom].LineStyle = Word.WdLineStyle.wdLineStyleSingle;

myStyle.ParagraphFormat.Borders[Word.WdBorderType.wdBorderBottom].LineWidth = Word.WdLineWidth.wdLineWidth100pt;

myStyle.ParagraphFormat.Borders[Word.WdBorderType.wdBorderBottom].Color= Word.WdColor.wdColorDarkRed;

//allinemanto centrato

myStyle.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

//riportiamo l'opzione di aggiornamento automatico allo stato originale

myStyle.AutomaticallyUpdate = updAutom;

}

catch

{

MessageBox.Show("Operazione non riuscita");

}

}

VB

Public Sub FormattaTitolo1()

Dim myDoc As Word.Document

Dim myStyle As Word.Style

Dim updAutom As Boolean

Try

'impostiamo la variabile per il documento attivo

myDoc = Application.ActiveDocument

'impostiamo la variabile per lo stile da modificare

myStyle = myDoc.Styles('Titolo 1')

'rileviamo l'impostazione della proprietà "aggiorna automaticamente" dello stile Titolo 1

'in modo da poterla impostare a true prima di effettuare le modifiche

'e poterla poi riportare al valore precedente al termine delle modifiche

updAutom = myStyle.AutomaticallyUpdate

'impostiamo a true l'aggiornamento automatico

myStyle.AutomaticallyUpdate = True

'apportiamo le modifiche necessarie allo stile Titolo 1

With myStyle.Font

.Name = "Haettenschweiler"

.Color = Word.WdColor.wdColorDarkRed

.Size = 22

.Bold = False

.Italic = False

End With

'assegnamo un bordo inferiore al paragrafo

With myStyle.ParagraphFormat

.Borders(Word.WdBorderType.wdBorderBottom).LineStyle = Word.WdLineStyle.wdLineStyleSingle

.Borders(Word.WdBorderType.wdBorderBottom).LineWidth = Word.WdLineWidth.wdLineWidth100pt

.Borders(Word.WdBorderType.wdBorderBottom).Color = Word.WdColor.wdColorDarkRed

'allinemanto centrato

.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter

End With

'riportiamo l'opzione di aggiornamento automatico allo stato originale

myStyle.AutomaticallyUpdate = updAutom

Catch ex As Exception

MessageBox.Show("Operazione non riuscita")

End Try

End Sub

Per fare delle prove potete usare un qualsiasi documento con del testo che abbia, tra gli altri, lo stile Titolo 1, e vedere il risultato.

Io ho utilizzato il file WordCustomRibbon_01.docx (contenuto nell'allegato) che, oltre a prestarsi allo scopo, contiene tutto il codice necessario, da copiare e incollare nei nuovi progetti.

Il file contiene diversi titoli con lo stile Titolo 1 e una nuova scheda Menù Aziendale (nel mio caso sono due perchè ho caricato entrambi gli addins) con il comando Formatta Titolo 1:

WordCustomRibbon01

 

Dopo aver fatto click sul comando, tutti i titoli assumono la formattazione assegnata:

WordCustomRibbon02

 

Naturalmente, come sempre, in allegato trovate entrambe le applicazioni e il file per l'esempio.

Ciao a tutti

Laura

Comments

Blog di Laura Ciccarese said:

Oggi proseguiamo con la personalizzazione del ribbon di Word, aggiungendo un comando che permette di

# April 25, 2007 8:02 PM