Il blog di Gianni Giaccaglini

Blog su VBA e VSTO
Gianni Giaccaglini

My Links

News

NB - V. anche gli ARTICOLI (in fondo a questa barra)
Solo quesiti validi a: giannigiac@tin.it
Il mio Best seller su VBA
(v. www.hoepli.it)


Il mio ultimo libro su Open XML
(v. www.FAG.it):



La mia nipotina ELISA

Foto con dedica a ME di
Bill Gates giovanissimo
nei mitici anni 80!

Categorie Post

Categorie Articoli

Archivio

Immagini

Blog Stats

VSTO 2008: novità importanti e limiti persistenti

VSTO: novità importanti e limiti persistenti

Amici vari, nonché colleghi blogger di questo stesso sito, coi quali ho modo di scambiare opinioni sui VSTO, Visual Studio Tools per Office System, mi accusano magari bonariamente di “non amare” questi pur potenti strumenti.

Cercherò ora di giustificare questo mio atteggiamento, insistendo fin d’ora che esso è scevro da ogni antipatia e men che meno da pregiudizi. Il punto di partenza tuttavia è un dato di fatto: la scarsa diffusione sul mercato di questi nobili tools. Una prova indiretta ma significativa è l’assai scarsa presenza nell’editoria di libri e manuali dedicati. A chi scrive ne risulta uno soltanto, relativo alla versione 2005 (quello rivolto ai VSTO 2008 non mi consta sia ancora uscito – parlo a settembre 2008):

Professional VSTO 2005 by Alvin Bruney
Editore Wrox (www.wrox.com)

Tale testo è notevole, accurato e... onesto. Infatti il buon Alvin non tace sulle motivazioni tecniche che a tutt’oggi hanno ostacolato il successo che i VSTO meriterebbero. Soprattutto due:

Ø  Richiede, per lo sviluppo, l’ambiente Visual Studio certo non alla portata di tutti come il pur spartano sistema di macro VBA (Visual Basic per applicazioni) che tutti gli utenti Office hanno gratis; e si noti che, con Visual Studio 2008, occorre l’edizione Professional, altrimenti niente VSTO;

Ø  Di conseguenza, le “applicazioni” Word, Excel ecc. create coi VSTO a) si portano dietro un non lieve framework VS .NET; b) sono un poco più lente rispetto ai normali “modelli” dotati di macro VBA (non molto, ma all’apertura la cosa si fa sentire).

A questo aggiungerei un fattore sociologico però non irrilevante.

Ø  I programmatori professionisti VB o C# da sempre snobbano il settore dell’automazione di oggetti Office: quasi nessuno ne conosce le librerie e oggetti, come il potente oggetto Range di Excel dotato delle innumerevoli proprietà e metodi che i power user ben conoscono, ma i programmatori pro ignorano o quasi, per contro questi ultimi hanno inaudite difficoltà ad apprendere le sofisticherie di Visual Studio, come le tremende classi generiche o delegate, per citarne solo alcune.

Novità importanti di VSTO 2008

Sono state presentate con grande, e giusta, enfasi alla presentazione prima delle ferie estive. La cosa sicuramente di maggior rilievo è l’integrazione in un rinnovato sistema di scambio documentario incentrato su uno SharePoint a sua volta molto potenziato e rinnovato. Mi manca lo spazio per riassumere tali virtù ma mi sento di dire (pur non facendo parte di una grande azienda...) che la faccenda apre prospettive molto interessanti in seno alle grandi imprese.

Tra le altre migliorie segnalo poi le due seguenti:

Ø  La possibilità di incorporare anche in un nuovo progetto VSTO precedente codice VBA; per l’esattezza non si tratta sic et simpliciter di normali macro bensì di add-in ossia strumenti che solo i power user più esperti erano capaci di creare, comunque è un ponte che viene crreato, potenzialmente in grado di colmare il gap anche culturale fra utenti “power” e professionali;

Ø  Un comodo wizard che permette facilmente di creare barre multifunzione personalizzate (RibbonX).

Nota – Non è così immediato trovare tale strumento o, meglio, componente, pertanto indico le mosse iniziali necessarie. In un progetto Word o Excel ecc. si deve: 1.  Nel menu Progetto scegliere Aggiungi componente; 2. Optare poi per Aggiungi nuovo elemento; 3. Nel susseguente riquadro, scegliere Office poi sulla destra Barra multifunzione (Finestra di progettazione visiva).

 

I power...etti che adottano normali macro VBA si dovranno arrangiare con un più modesto Editor, gratuito ma che richiede pazienti digitazioni del file XML che è alla base del RibbonX (v. specifico post di chi scrive su questo stesso share office.it) e chi spera che in futuro Microsoft porterà questo mezza anche fra i comuni mortali se lo scordi (anche se – spes ultima dea – vorrei sbagliare).

La buona notizia è che i ribbon personali creati coi VSTO dovrebbero essere file utilizzabili anche in ambiente VBA (dunque ci si può rivolgere a un amico che dispone di Visual Studio 2008 Professional, per la bisogna).

Ø  Notevole infine il supporto di feature avanzate che VSTO ereditano dal mondo .NET: al linguaggio C#, alle Windows Form e a una ricca varietà di controlli vecchi e nuovi i VSTO 2008 ora affiancano il potente linguaggio LINQ (Language Integrated Query per interrogare in modo sintetico dati sia relazionali che XML) e la libreria OpenXml.dll  (°) per gestire in modo altrettanto potente (“passando sopra” a DOM + XPath) il nuovo formato XML aperto OOXML di Word, Excel e PowerPoint 2007.

 

Ø  Nota (°). Mi faccio un po’ di propaganda: sta per uscire il mio libro su Open XML edito da FAG (www.fag.it). Utilizza macro VBA, ergo DOM + XPath ma in parte anche tale libreria, in ambiente VSTO 2008.

Perduranti limitazioni

Beninteso, per chi non opera all’interno di grandi organizzazioni.

Alle considerazioni generali richiamate in apertura si aggiungono due punti deludenti, almeno per me, il primo relativo ad Excel, il secondo relativo a Word.

1)      Le funzioni d’utente (UDF, User Defined Function), quelle che si possono aggiungere al repertorio di funzioni Excel e richiamare nelle celle del foglio di lavoro) non sono possibili in managed code, ma soltanto su tradizionali moduli VBA, il che costituisce una contraddizione rispetto al vanto primario dei VSTO (le nuove “macro” risiedono in librerie .dll, inaccessibili all’utente finale e agli hacker meno smaliziati);

      2)     Non esiste un equivalente del modulo NewMacros di Word. Posso sbagliare ma credo che
              ciò esclude la possibilità di macro che agiscano su tutti i documenti.

Circa il punctum dolens delle UDF, in un momento successivo ho pensato che dovrebbe esistere una scappatoia, legata alla novità del ri-uso di precedenti add-in VBA: infatti se questi contengono delle funzioni d’utente queste dovrebbero essere richiamabili nel foglio (°). Resta il fatto che credo che la maggior parte degli utenti abbia sviluppato UDF su normali moduli VBA, per cui dovrebbero tradurle in librerie add-in, compito che esula dalle competenze dei power user, anche smaliziati.

Nota (°) Gl’interessati sono invitati a sperimentare questa ipotesi, cosa che non ho tempo di fare. Se ottengono risultati me li mandino (ggiaccaglini@msn.com). Se l’esito sarà positivo lo pubblicherò.

 

Sul secondo punto la discussione è aperta. Confesso che fino a poco tempo fa non l’avevo utilizzata che saltuariamente. Come sviluppatore prevalente di modelli Excel ero portato a pensare che ognuno di questi fosse un capitolo a sé, ma in Word possono essere molte le cose di routine richieste con documenti vecchi e nuovi. Come forse non tutti si rendono conto, le macro ospitate nel “calderone” NewMacros restano in vita con tutti i documenti anche senza salvare  quello corrente (infatti vanno automaticamente a far parte di Normal.dot !) Ora l’impostazione stessa dei VSTO sembra privilegiare il concetto di un file Word come applicazione, il che ostacola, o addirittura impedisce?, la possibilità offerta dal codice onnipresente delle NewMacros.

Su questo punto sto preparando un articolo, spero, chiarificatore. Lo pubblicherò appena posso, assieme a un caso applicativo particolare che anticipo: conversione, in Word, di cifre in lettere (es. “12.305” à “dodicimilatrecentocinque”) funzionalità di cui il visitatore che ce l’ha richiesta necessita sempre o quasi.

Nota. Confessiamolo: la maggior parte di noi ha sempre pensato che NewMacros servisse quasi solo alla registrazione di nuove macro. NON è così!

?>

?>

?>

posted on lunedì 8 settembre 2008 16.59