Showing posts with label Office. Show all posts
Showing posts with label Office. Show all posts

Saturday, March 7, 2009

Creare degli Schematics

. Saturday, March 7, 2009
0 commenti

Ritengo l’uso degli schematics estremamente importante in quanto consentono di trasmettere informazioni in modo semplice ed immediato grazie all’uso di simboli grafici facilmente interpretabili dall’utente.
Nel campo della progettazione software ma non solo, ci sono tantissimi applicativi (free e non) che ci vengono incontro.
Sicuramente il più blasonato è Office Visio della Microsoft che dispone di un’ampia gamma di diagrammi. Ovviamente facendo parte del pachetto Office è possibile generare diagrammi pivot attingendo dati da Excel, Project, Sharepoint ecc.
Un’ottima alternativa a Office Visio può essere: SmartDraw, altro prodotto commerciale.
Per chi invece vuole provare qualcosa di diverso dal solito consiglio l’uso di Inkscape (molto più simile ad Illustrator che ai due precedentemente citati), volendo in accoppiata con Graphviz.
Entrambi open source, permettono di rappresentare le informazioni in SVG o altri formati vettoriali:


inkscape-0

Personalmente ho trovato estremamente utile l’uso di yEd Graph Editor, scritto in Java. I suoi Hierarchical Layout sono di veloce utilizzo (quindi nessun tipo di rallentamento come qualcuno potrebbe pensare) e gestiti tramite un interfaccia grafica molto piacevole.


yededitor

Infine per quanto riguarda la progettazione di interfacce web si possono benissimo utilizzare i tool visti fino a questo momento, ma un software che merita la giusta attenzione è Balsamiq.
La sua funzione più peculiare  è la possibilità di creare dei mockup, ossia delle bozze di interfacce. Applicazione a dir poco geniale, è sviluppata in Flex, e rende la nostra bozza simile a quella che avremmo realizzato tramite gli strumenti tradizionali: carta e matita.


balsamiq

Esiste una versione online:
Demo Balsamiq
ma anche una versione desktop a 79$.
Un’ultima cosa importante su questo progetto: è stato realizzato da un italiano, Giacomo Guilizzoni, un motivo in più per provarlo (in questo caso un pò di patriottismo ci sta tutto).

Read More »»

Sunday, December 21, 2008

Un coniglio in Outlook 2007

. Sunday, December 21, 2008
0 commenti

Nel 2005 si registrava un boom di vendite di un oggetto tecnologico, a forma di coniglietto sempre connesso ad internet chiamato Nabaztag.
Sul tecno coniglio si trovano tantissime informazioni sulla rete, sono state create delle vere e proprie community, diventando in pochissimo tempo un oggetto fashion ma che presenta ancora oggi un bel pò di pecche.
L’intento di questo post è quello di parlare di un suo particolare aspetto cioè le API attraverso le quali possiamo inviare messaggi o fargli eseguire delle coreografie (luci e movimento delle orecchie) o dargli in pasto in stream un mp3.
Gli ingredienti di questo semplice tutorial sono Outlook 2007 e il Framework .Net.
Ma partiamo con ordine. Prima di tutto bisogna recuperare due informazioni importanti cioè il serial number del Nabaztag e il token cioè una serie di cifre con la funzione di essere un identificatore extra.
Queste due informazioni si possono recuperare dalla pagina di preferenze del coniglio:

nabaztag
Lo scopo è quello di poter usare Outlook per inviare un messaggio al coniglio e per far questo ho creato un progetto di tipo Add-in per Outlook 2007 tramite Visual Studio 2008:

nabaztag1 
Con Office 2007 è stata introdotta una nuova interfaccia utente chiamata Ribbon che ha innescato un notevole cambiamento nella programmazione per Office.
Aggiungo al progetto Add-in un nuovo item di tipo Ribbon:

nabaztag2
Per chi vuole approfondire l’argomento Ribbon segnalo questo articolo pubblicato su MSDN Magazine (Febbraio 2007):
Ampliare 2007 Office System con proprie schede e controlli Ribbon

Per semplicità e brevità mostrerò soltanto come sia possibile inviare con queste poche righe di codice un messaggio TTS.
Il primo passo consiste nella creazione di una classe Bunny che presenta una serie di property e un metodo Send che ha la funzione di impacchettare il messaggio da inviare al server. 
Inviare un evento al tecno roditore significa effettuare una richiesta al seguente indirizzo:
http://api.nabaztag.com/vl/FR/api.jsp
passando una serie di parametri che potete trovare nella documentazione delle API.
Nell’esempio oltre al serial e al token invio, il messaggio TTS, la lingua e la voce che leggerà il messaggio.
Quest’ultimo viene indicato tramite il parametro voice.
Alcuni esempi di voci che potete selezionare:

UK - Leonard UK - Mister muggles UK - Penelope
UK - Shirley US-Billye FR - Archibald

 

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Configuration;
   4: using System.Linq;
   5: using System.Text;
   6: using System.Net;
   7:  
   8: namespace LookNabaztag
   9: {
  10:   public class Bunny
  11:   {
  12:     private string url = "http://api.nabaztag.com/vl/FR/api.jsp?";
  13:  
  14:     private string tts;
  15:     public string TTS
  16:     {
  17:       get
  18:       {
  19:         StringBuilder sbTTS = new StringBuilder();
  20:         if (tts..Trim().Length > 0)
  21:           sbTTS.Append("&tts=" + tts.Trim().Replace(" ", "+"));
  22:         if (voice..Trim().Length > 0)
  23:           sbTTS.Append("&voice=" + voice.Trim());
  24:         return sbTTS.ToString();
  25:        }
  26:        set 
  27:        { 
  28:          tts = value; 
  29:        }
  30:      }
  31:  
  32:      private string voice;
  33:      public string Voice
  34:      {
  35:        get 
  36:        { 
  37:          return voice; 
  38:        }
  39:        set 
  40:        { 
  41:          voice = value; 
  42:        }
  43:     }
  44:  
  45:     public void SendMessage()
  46:     {
  47:       WebRequest request;
  48:       try
  49:       {
  50:         StringBuilder sbUrl = new StringBuilder();
  51:         sbUrl.Append(url);
  52:         sbUrl.Append("sn=");
  53:         //Recupero dall'app.config il seriale
  54:         sbUrl.Append(ConfigurationSettings.AppSettings["serial"]);
  55:         sbUrl.Append("&token=");
  56:         //Recupero dall'app.config il token
  57:         sbUrl.Append(ConfigurationSettings.AppSettings["token"]);
  58:         sbUrl.Append(TTS);
  59:         request = WebRequest.Create(sbUrl.ToString());
  60:         WebResponse response = request.GetResponse();
  61:       }
  62:       catch (Exception exc)
  63:       {
  64:         string error = exc.Message;
  65:       }
  66:     }
  67:   }
  68: }


Adesso ci possiamo concentrare sul Ribbon:


nabaztag3 
Ho evidenziato nell’immagine due aspetti importanti della configurazione del Ribbon:

1) il nome dell’etichetta dell’add-in,

2) la tipologia.

In questo caso le tipologie che ho indicato tramite il property RibbonType sono due: Microsoft.Outlook.Mail.Compose, Microsoft.Outlook.Mail.Read indicando che solo al momento di lettura o composizione del messaggio di posta elettronica l’add-in sarà visibile.

Nel Group1 ho inserito un semplice controllo Button assegnando un’immagine per dargli un aspetto più simpatico.

Sull’evento click del Button vado a recuperare il corpo dell’email tramite il property Body per poi instanziare la classe Bunny vista in precedenza:

   1: using Outlook = Microsoft.Office.Interop.Outlook;
   2: .....
   3: //Recupero testo email
   4: Outlook.MailItem mail = 
   5:   (Outlook.MailItem)Globals.ThisAddIn.Application.Inspectors[1].CurrentItem;
   6: if (mail != null)
   7: {
   8:   Bunny bunny = new Bunny();
   9:   bunny.TTS = mail.Body;
  10:   bunny.Voice = "UK-Shirley";
  11:   bunny.SendMessage();
  12: }


Non ci rimane che osservare il risultato finale:

nabaztag4 
Se non sono presenti i soliti disservizi dei server Violet allora cliccando il tasto Send verrà inviato al coniglio un messaggio contenente il corpo dell’email.

Read More »»

Wednesday, November 5, 2008

Insert DataTable in Excel tramite VSTO

. Wednesday, November 5, 2008
2 commenti

VSTO sta per Visual Studio Tools per Office e quindi come si può ben intuire permette di creare soluzioni per Office usando Visual Studio e il .Net Framework.
Ma vediamo subito un semplicissimo esempio.
Il primo passo consiste nel creare un progetto per Office, nella fattispecie ho optato per la versione 2007 utilizzando il template Workbook:
Vsto1
Per semplicità genero un DataTable composto da tre colonne e cento righe:

   1: private DataTable CreateDataTable()
   2: {
   3:   DataTable dt = new DataTable();
   4:   dt.Columns.Add(new DataColumn("Id", typeof(int)));
   5:   dt.Columns.Add(new DataColumn("Desc", typeof(string)));
   6:   dt.Columns.Add(new DataColumn("Date", typeof(DateTime)));
   7:   DataRow row;
   8:   for (int i = 0; i < 100; i++)
   9:   {
  10:     row = dt.NewRow();
  11:     row[0] = i;
  12:     row[1] = "Desc: " + i.ToString();
  13:     row[2] = DateTime.Now.AddDays(i);
  14:     dt.Rows.Add(row);
  15:   }
  16:   return dt;
  17: }

Nell'evento Startup del primo sheet vado a richiamare il metodo precedentemente creato, il resto è un semplice doppio ciclo ( righe, colonne) per popolare le singole celle del foglio Excel:

   1: DataTable dt = CreateDataTable();
   2: for (int r = 1; r <= dt.Rows.Count; r++)
   3:   for (int c = 1; c <= dt.Columns.Count; c++)
   4:     Globals.Sheet1.Cells[r, c] = dt.Rows[r - 1][c - 1];


Per osservare il risultato basta lanciare l'applicazione.
Lo stesso risultato si può ottenere, con un notevole miglioramento dei tempi di esecuzione, attraverso l'oggetto Excel.Range che rappresenta una singola cella o un intervallo di celle:

   1: DataTable dt = CreateDataTable();
   2: Excel.Range rg;
   3: for( int r=1; r<=dt.Rows.Count; r++)
   4: {
   5:   rg = Globals.Sheet1.Range[ Globals.Sheet1.Cells[ r, 1], 
   6:                              Globals.Sheet1.Cells[r, dt.Columns.Count]];
   7:   rg.Value2 = dt.Rows[r-1].ItemArray;
   8: }

A questo punto tramite un semplice test (eseguiti su virtual machine con SO Windows Server 2008) si scende dai 450 millisecondi con il primo metodo ai 310 millisecondi di quest'ultimo.
Il divario diventa molto più rilevante man mano che il numero di righe/colonne del DataTable aumenta.

Read More »»

Saturday, August 30, 2008

Visio 2007 e PowerShell

. Saturday, August 30, 2008
0 commenti

  powershellVisio  
Tool in lingua giapponese per Windows PowerShell che sembra permettere all'utente di creare script in modo visuale tramite l'uso di Visio 2007.
C'è chi però sta già lavorando per una versione in inglese.

Read More »»

Tuesday, July 1, 2008

Microsoft Math per Word 2007

. Tuesday, July 1, 2008
0 commenti

Un add-in per Microsoft Office Word 2007 che permette di risolvere equazioni, creare grafici 2D e 3D, svolgere vari calcoli numerici, semplificare espressioni algebriche ecc.

Read More »»

Wednesday, April 9, 2008

Communicator Add In per Outlook 2007

. Wednesday, April 9, 2008
0 commenti

Connector Un Add-In creato da Michael Dunn che consente di visualizzare ed interagire all'interno di Outlook 2007 con l'elenco dei contatti di Office Communicator 2007.

Read More »»

Friday, February 15, 2008

VisioExportToXAML

. Friday, February 15, 2008
0 commenti

ToolVisio Segnalazione di servizio:
Saveen Reddy ha rilasciato sul sito codeplex un add-in per Visio 2007 che consente di esportare i progetti in fomato XAML.

Read More »»

Thursday, February 7, 2008

Video per le funzioni in Office 2007

. Thursday, February 7, 2008
0 commenti

Quante volte ci è capitato di dover fare la caccia al comando/funzione per i menù di Office 2007?
Credo tantissime volte.
Adesso però, Microsoft ha rilasciato delle applicazioni flash che ci aiutano nella "ricerca".

ExcelGuide1 ExcelGuide2

Sono stati riprodotti i menu di Word ed Excel 2003. Al click su un comando, ci viene mostrato il menu di Office 2007, con tanto di percorso da seguire.
Excel 2007 Guide
Word 2007 Guide
Fonte: blog Andrea Dottor

Read More »»

Wednesday, January 16, 2008

Excel Viewer

. Wednesday, January 16, 2008
0 commenti

Rilasciato da Microsft il viewer di Excel 2007. In questo modo senza avere sul proprio sistema Office 2007 è possibile visualizzare ma non modificare documenti Microsft Excel.

Read More »»