Web Analytics January 2007 - Posts - Blog di Laura Ciccarese

Blog di Laura Ciccarese

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

January 2007 - Posts

Excel 2007: formattazione condizionale

Se siete interessati ad alcune novità sulla formattazione condizionale di Excel 2007, guardate l'approfondimento alla pagina: Formattazione condizionale in Excel 2007 e VBA in Excel 2003

E se avete richieste in merito, fatemelo sapere Yes

 

Ciao a tutti

Laura

Posted: Jan 29 2007, 06:45 PM by laura | with no comments
Filed under: , , ,
Assegnare immagini di formato diverso ad un comando del Ribbon

Oggi vorrei completare il post .NET Ribbon con il codice necessario per assegnare ad un comando del Ribbon immagini di vario formato: ico, jpg, bmp, gif, ecc.

 

Scaricate (se non l'avete già fatto Big Smile) l'applicazione allegata al post Assegnare immagini personalizzate ad un comando del Ribbon e, seguendo le istruzioni del post,  predisponete tre comandi sul tab personalizzato, e tre file di risorsa per le rispettive immagini (io ho utilizzato un file .ico, un file .gif e un file .bmp)

1. Modificare il file Ribbon1.xlm

Il file Ribbon1.xml dovrebbe avere la seguente struttura:

 

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

<ribbon>

<tabs>

<tab id="SchedaPersonalizzata"

label ="Laura">

<group id="Immagini"

label="Immagini aziendali"

<toggleButton id="InserisciLogo01"

size="large"

label="Inserisci Logo Ufficiale"

screentip="Inserisce il logo ufficiale in corrispondenza del cursore"

onAction="OnToggleButton"

getImage ="GetMyImage" />

<toggleButton id="InserisciLogo02"

size="large"

label="Inserisci Logo per web"

screentip="Inserisce il logo web in corrispondenza del cursore"

onAction="OnToggleButton"

getImage ="GetMyImage" />

<toggleButton id="InserisciLogo03"

size="large"

label="Inserisci Logo interno"

screentip="Inserisce il logo per la documentazione interna in corrispondenza del cursore"

onAction="OnToggleButton"

getImage ="GetMyImage" />

</group>

</tab>

</tabs>

</ribbon>

</customUI>

2. Modificare la funzione GetMyImage

Modificate la funzione GetMyImage in modo da passare l'immagine corrispondente ad  ogni controllo del Ribbon:

public stdole.IPictureDisp GetMyImage(Office.IRibbonControl control)

{

stdole.IPictureDisp pictureDisp = null;

switch (control.Id)

{

case "InserisciLogo01":

pictureDisp =

ImageConverter.Convert(GetResourceBitmap("sqltut.ico"));

break;

case "InserisciLogo02":

pictureDisp =

ImageConverter.Convert(GetResourceBitmap("Logo.bmp"));

break;

case "InserisciLogo03":

pictureDisp =

ImageConverter.Convert(GetResourceBitmap("Diavoletto.gif"));

break;

}

return pictureDisp;

}

3. Modificare la funzione GetResourceBitmap

Modificate la funzione che restituisce l'immagine in modo che gestisca la tipologia di immagini.ico separatamente dalle altre:

public static System.Drawing.Bitmap GetResourceBitmap(string resourceName)
{
Assembly asm = Assembly.GetExecutingAssembly();
string[] resources = asm.GetManifestResourceNames();
System.Drawing.Bitmap image = null;

foreach (string resource in resources)
{
if (resource.EndsWith(resourceName))
{
System.IO.Stream stream =
asm.GetManifestResourceStream(resource);
if (stream == null)
{
break;
}
string extension =
System.IO.Path.GetExtension(resourceName).ToLower();
switch (extension)
{
case ".ico":
image = new System.Drawing.Icon(stream).ToBitmap();
break;
default:
image = new System.Drawing.Bitmap(stream);
image.MakeTransparent();
break;
}
stream.Close();
break;
}
}
return image;
}

4. Provare per credere

Lanciate l'applicazione e il risultato, con le mie immagini, è il seguente:

ImmaginiVarie01

Trovate l'applicazione completa in allegato 

Chiedo ancora perdono agli utenti di Visual Basic che rimando all'articolo in uscita alla fine del mese (Embarrassed).

Ciao a tutti

Laura

Pacchetto di compatibilità per Office 2007

 

Avete installato Office 2003 e dovete aprire dei files salvati con la nuova versione?

Niente di più semplice: scaricate il Pacchetto di compatibilità per Office 2007 e siete a posto!

Fate click qui per il download oppure fate doppio click sul file salvato con la nuova versione: sarà Office a comunicarvi che il file è in versione 2007 e vi porterà al sito per il download.

Ciao a tutti

Laura

Posted: Jan 22 2007, 03:53 PM by laura | with no comments
Filed under: ,
.NET Ribbon!!!

Questa mattina, ancora in preda all'entusiasmo per la .NET Pizza, ho giocato un pò con il Ribbon e questo è il risultato:

 

NetTorta

Ma è inutile che premiate il bottone: per avere un pezzo di .NET Torta dovrete venire alla prossima .NET Pizza con noi!!!!

PS La torta della foto l'ho fatta io!

Ciao

Laura

Posted: Jan 20 2007, 01:37 PM by laura | with 3 comment(s)
Filed under:
.NET Pizza

Un evento veramente "istruttivo": tra sigle di ogni genere, antipasti, pizze e dolci (offerti da Michele Big Smile, non dimentichiamolo), ho avuto modo di conoscere delle persone simpatiche e divertenti, al di fuori degli schemi.

Un grazie a Michele per l'organizzazione, a Tiziana che mi ha "trascinata" nella community, e a tutti gli altri che mi hanno fatto sentire parte di essa.

 

Ciao e....a presto Pizza

Laura

Posted: Jan 20 2007, 11:51 AM by laura | with 4 comment(s)
Filed under:
Posizione delle schede nel Ribbon

Vi piacerebbe avere la vostra scheda personalizzata in prima posizione nel Ribbon (lo so, non pensate ad altro, non mangiate, non ci dormite la notte....Geeked)

Ma adesso, la soluzione al vostro problema c'è: inserite l'attributo insertBeforeMso ="TabHome" al tag Tab nel file Ribbon.xml:

<tab id="SchedaPersonalizzata" label="Scheda Personalizzata" insertBeforeMso ="TabHome">

et voilà! (En français, s’il vous plait!)

La vostra "Scheda Personalizzata" si trova al primo posto!!!!

PosizioneSchede

 

Alla prossima

Ciao a tutti

Laura

XML Notepad 2007

 

Vi segnalo un interessante editor per file xml all'indirizzo:

http://www.microsoft.com/downloads/details.aspx?FamilyID=72D6AA49-787D-4118-BA5F-4F30FE913628&displaylang=en

Se preferite visualizzare la struttura del file sottoforma di albero cui  aggiungere o eliminare voci, rinominare, ecc; può essere utile.

Dopo averlo installato, è possibile fare click destro su un file xml e utilizzare il nuovo editor:

CustomIcon01

Questo è quello che vi si presenta:

CustomIcon02

E' possibile aggiungere elementi e assegnarne i valori; visualizzare il risultato in modalità standard (XLS output), ecc.

Ad esempio, io ho aggiunto gli elementi e i valori relativi ad un nuovo comando per il ribbon:

CustomIcon03

e, dopo aver salvato, aprendo Excel, il ribbon risulta così modificato:

CustomIcon04

Un'altra funzionalità che può essere interessante (e che gli utenti di Word conoscono bene) è la possibilità di confrontare due file xml per visualizzarne le differenze, evidenziate con colori diversi descritti in una legneda:

CustomIcon05

CustomIcon06

Ciao a tutti

Laura

Assegnare immagini personalizzate ad un comando del Ribbon

Oggi rispondo ad un quesito che sicuramente interessa molti: assegnare un’icona personalizzata ad un comando nel Ribbon.

Maggiori chiarimenti e dettagli saranno disponibili prossimamente in un articolo che sto preparando sul Ribbon, nel quale si analizza un caso studio completo; per il momento vi darò solo le indicazioni necessarie a rispondere velocemente a quanti hanno la necessità di risolvere il problema delle immagini non Office.

Supponiamo allora di voler assegnare l’icona “sqltut.ico” (o una qualsiasi, naturalmente) al comando “Insersci Logo” di una scheda personalizzata.

Operazioni da eseguire

1. indicare al Ribbon che l’icona da utilizzare per il nostro comando non è un’icona di Office;

2. convertire la nostra icona in un oggetto di tipo IPictureDisp, utilizzato dal Ribbon per assegnare immagini esterne.

Procedimento

Modifica del file Ribbon.xml

Oltre a correggere l’id e l’etichetta del tab e del gruppo di comandi, è necessario sostituire l’attributo relativo all’immagine statica:

imageMso="HappyFace"

con l’attributo che recupera l’immagine mediante la funzione GetMyImage:

getImage ="GetMyImage"

Il risultato sarà il seguente:

 

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

<ribbon>

<tabs>

<tab id="SchedaPersonalizzata"

label ="Scheda Personalizzata">

<group id="Immagini"

label="Immagini aziendali">

<toggleButton id="InserisciLogo"

size="large"

label="Inserisci Logo"

screentip="Inserisce il logo aziendale nell’intestazione di pagina"

onAction="OnToggleButton"

getImage ="GetMyImage" />

</group>

</tab>

</tabs>

</ribbon>

</customUI>

 

Il Ribbon utilizzerà la funzione (callback) GetMyImage per passare l’id del comando e riceverne l’IPictureDisp da utilizzare per l’icona.

L'icona da utilizzare deve esssere inserita come risorsa nel progetto.

Caricamento dell’icona nelle risorse del progetto di Visual Studio

1. Doppio click su Proprietà nel Solution Explorer

CustomIcon01

2. Attivare il tab Resources

3. Fare click su Add resources

4. Fare click su Add from existing file

CustomIcon03CustomIcon02CustomIcon03CustomIcon02CustomIcon03CustomIcon02

5. Chiudere la finestra delle risorse e fare click destro sul file corrispondente all’icona

6. Nella proprietà Build Action selezionare Embedded Resource (in tal modo, se si modifica nell’editor di Visual Studio, le modifiche saranno apportate istantaneamente)

L’icona viene aggiunta alle risorse del progetto:

CustomIcon04

Callback GetMyImage

Posizionare la funzione GetMyImage nella sezione callbacks del file Ribbon.cs, dopo la callback OnToggleButton:

VB

Public Function GetMyImage (ByVal control As Office.IRibbonControl) As stdole.IPictureDisp

Dim pictureDisp As stdole.IPictureDisp

pictureDisp = Nothing

Select Case control.Id

Case " InserisciLogo "

pictureDisp = ImageConverter.Convert(GetResourceBitmap("sqltut.ico"))

End Select

Return pictureDisp

End Function

C#

public stdole.IPictureDisp GetMyImage(Office.IRibbonControl control)

{

stdole.IPictureDisp pictureDisp = null;

switch (control.Id)

{

case "InserisciLogo":

pictureDisp =

ImageConverter.Convert(GetResourceBitmap("sqltut.ico"));

break;

}

return pictureDisp;

}

Funzioni per la conversione dell’immagine

Aggiungere il metodo GetResourceBitmap nella regione helper del Ribbon.cs

VB

Public Shared Function GetResourceBitmap(ByVal resourceName As String) As System.Drawing.Bitmap

Dim asm As Assembly

Dim resources As String()

Dim image As System.Drawing.Bitmap

asm = Assembly.GetExecutingAssembly()

resources = asm.GetManifestResourceNames()

image = Nothing

For Each resource As String In resources

If (resource.EndsWith(resourceName)) Then

Dim stream As System.IO.Stream

stream = asm.GetManifestResourceStream(resource)

If (stream Is Nothing) Then

Exit For

End If

Dim extension As String

extension = System.IO.Path.GetExtension(resourceName).ToLower()

image = New System.Drawing.Icon(stream).ToBitmap()

stream.Close()

Exit For

End If

Next

Return image

End Function

C#

public static System.Drawing.Bitmap GetResourceBitmap(string resourceName)

{

Assembly asm = Assembly.GetExecutingAssembly();

string[] resources = asm.GetManifestResourceNames();

System.Drawing.Bitmap image = null;

foreach (string resource in resources)

{

if (resource.EndsWith(resourceName))

{

System.IO.Stream stream =

asm.GetManifestResourceStream(resource);

if (stream == null)

{

break;

}

string extension =

System.IO.Path.GetExtension(resourceName).ToLower();

image = new System.Drawing.Icon(stream).ToBitmap();

stream.Close();

break;

}

}

return image;

}

Aggiungere la classe ImageConverter alla fine del Ribbon.cs

VB

Friend Class ImageConverter

Inherits System.Windows.Forms.AxHost

Sub New()

MyBase.New(Nothing)

End Sub

Public Shared Function Convert(ByVal image As System.Drawing.Image) As stdole.IPictureDisp

Return AxHost.GetIPictureDispFromPicture(image)

End Function

End Class

C#

internal class ImageConverter : System.Windows.Forms.AxHost

{

private ImageConverter()

: base(null)

{

}

public static stdole.IPictureDisp Convert(System.Drawing.Image image)

{

return (stdole.IPictureDisp)

AxHost.GetIPictureDispFromPicture(image);

}

}

E, infine, non resta che compilare e lanciare l’applicazione:

CustomIcon05

In allegato trovate l'applicaizone in C# (chiedo perdono gli utenti di VB ([:'(]) ma nell'articolo ci saranno esempi con entrambi i linguaggi Big Smile)

Che ne dite?

Buon divertimento a tutti!

 

Ciao

Laura

Office Icon Gallery

 

Supponiamo che siate degli accaniti utilizzatori di icone: create comandi personalizzati a "go-go" e, di conseguenza, volete assegnare delle icone adeguate.

Che fate?

Avete due possibilità:

  1. utilizzate l'elenco dei controlli che vi ho indicato nel post Elenco dei controlli del ribbon, cercate l'IdMso corrispondente al comando di Office la cui icona vi sembra adeguata, lo utilizzate incrociando le dita!!! (e si, perchè come già si è capito, non tutti i comandi dispongono di un'icona, anche se dispongono di un controlID!!!!
  2. al 2° o 3° tentativo, volete prendere Office e buttarlo nel cestino (di Windows, si intende!), oppure volete linciare me che vi ho indicato questa strada (e questo già è peggio, almeno per me). Allora utilizzate il metodo descritto nel post Ribbon: creare comandi personalizzati utilizzando icone di comandi esistenti consistente nella visualizzazione del comando nella finestra Personalizza e della lettura del relativo nome. E' vero, dovete appuntarvi il nome del controllo ma almeno siete sicuri che l'icona ci sia!!!!

Diciamo, però, che nonostante questi due sistemi possano essere accettabili, sarebbe molto meglio poter visualizzare le icone disponibili in un'unica finestra, e magari non solo le icone dei comandi di Excel, ma tutte quelle di office, a prescindere dal comando cui sono associate perchè, dopotutto, a voi importa poco del comando,  A VOI SERVE SOLO L'ICONA!!!! Super Angry

E qui interviene la Icon Gallery che, non per niente, è il titolo di questo post!

Scaricate l'AddIn dal sito di MSDN

http://www.microsoft.com/downloads/details.aspx?familyid=12b99325-93e8-4ed4-8385-74d0f7661318&displaylang=en

e installatelo: durante la procedura vi si chiederà una posizione per il file che contiene le galleries: indicategliene una comoda.

Successivamente, aprite il file Office2007IconsGallery.xlsm che è stato inserito nella suddetta cartella, e apritelo:come per incanto, nella scheda Sviluppo vedrete apparire ben 9 Galleries contenenti decine e decine di icone!!!!!

(Se la scheda Sviluppo non è visualizzata (e non lo è per default!!), spuntate il flag sulla voce "Mostra barra sviluppo sulla scheda multifunzione"  nella finestra Office > Opzioni > Impostazioni Generali).

GUARDATE E STUPITE!!!!!

ImageGallery01

Aprite una gallery

ImageGallery02

ImageGallery03

Fate click su quella che vi piace e vi apparirà una finestra con l'idMso: prendetene nota e utilizzatelo.

ImageGallery04

Ma qualche utente esigente potrebbe dire: "perchè devo prenderne nota, non potremmo, invece, fare in modo che l'idMso venga salvato negli appunti, così da poterlo utilizzare dove mi pare?"

Possiamo dargli torto?

Sicuramente no!!

Allora ho provveduto ad apportare una piccola modifica al codice del progetto VBA del file excel e, per la precisione, nel modulo RibbonX, che riporta le seguenti righe:

Originale

Sub OnAction(control As IRibbonControl, id As String, index As Integer)
If (control.Tag = "large") Then
id = Strings.Mid(id, 3)
End If
Dim form As New ControlInfoForm
form.nameX.Caption = "imageMso: " & id
Set form.Image1.Picture = Application.CommandBars.GetImageMso(id, 16, 16)
Set form.Image2.Picture = Application.CommandBars.GetImageMso(id, 32, 32) form.Show
End Sub

Aggiungendo le righe in rosso:

Modificato

Sub OnAction(control As IRibbonControl, id As String, index As Integer)
If (control.Tag = "large") Then
id = Strings.Mid(id, 3)
End If
Dim form As New ControlInfoForm
form.nameX.Caption = "imageMso: " & id
Set form.Image1.Picture = Application.CommandBars.GetImageMso(id, 16, 16)
Set form.Image2.Picture = Application.CommandBars.GetImageMso(id, 32, 32)

'codice per memorizzare l'id negli appunti di Office
Dim doId As DataObject
Set doId = New DataObject
doId.SetText id
doId.PutInClipboard

form.Show
End Sub

Se adesso provate a scegliere un'icona e, successivamente, aprite un nuovo file di excel o di word o di quello che volete voi, e incollate: ecco apparire l'agognato IdMso:

ImageGallery07

Direi che per ora può andare, no???

(Lo so, mi diverto con poco! Big Smile)

Alla prossima

 

Ciao

Laura

Office 2007 italiano

Da qualche giorno ho installato la versione di prova di Office 2007 Italiano, disponibile nel post  Download Microsoft Office 2007 Enterprise 2007 trial in versione italiana  di Emanuele Mattei, oppure la versione definitva disponibile per gli MSDN Subscribers sul sito: http://msdn2.microsoft.com/en-us/subscriptions/default.aspx.

Per quanto riguarda l'interfaccia, ho notato qualche piccola modifica apportata alla Barra di accesso rapido (Quick Access Toolbar), che adesso riporta:

  • un set di comandi "a portata di flag" (quelli di utilizzo più comune): Nuovo, Apri, Stampa Immediata, Anteprima di stampa, ecc.;
  • la voce Altri comandi, che permette di accedere alla solita finestra di personalizzazione;
  • il comando per ridurre ad icona il Ribbon (in italiano, Barra Multifunzione), cosa che, comunque, si può continuare a fare con doppio click su un qualsiasi menù (che adesso si chiamano Schede).

                                     QuickAccess02

Inoltre, sono state apportate alcune modfiche ai menù (che in italiano si chiamano Schede). Ad esempio, il gruppo Forme (Shapes), del menù Inserisci di Excel, è stato eliminato e la voce Forme è stata integrata nel gruppo Illustrazioni (illustrations):

 

Quindi, se non trovate qualcosa, guardatevi in giro e scoprite le differenze!!Yes

Per quanto riguarda la personalizzazione del Ribbon, ricordate l'icona PasteValues che ho utilizzato nel mio precedente post?  

Ebbene, ho lanciato l'AddIn che la impostava e, nella versione italiana di Excel, l'icona non c'era più!!!!! Naturalmente ho pensato che fosse cambiato l'IdMso dell'immagine, ma, no, per fortuna (Confused), semplicemente è stata eliminata l'icona dal comando!!!!

Guardare per credere:

Verione inglese                                     

 Versione italiano

Peccato, era un'icona tanto carina!!!!!! Broken Heart

 

Ciao a tutti

Laura