Luca Regnicoli

Old Format or invalid... è finita?

Un bel bug dello sviluppo su Office 2003 riconosciuto, ufficiale, odiato e causa di notti insommi si verifica quando utilizziamo Excel 2003 con .NET, anche in automation, e i regional settings della macchina sono impostati in una lcid diversa rispetto alla lcid di installazione di Office. Che hai detto? Se avete Windows con le impostazioni internazionali in italiano ma Office è in inglese e utilizzate .NET con Excel 2003 (anche per scrivere "ciao" nella cella A1 sia in automation, smarttag, smartdoc, vsto 2003) vi beccate l'eccezione: Exception from HRESULT: 0x800A03EC  o meglio "Old format or invalid type library".

Il problema nasce dal fatto che Excel vorrebbe parlare italiano :-) e cerca di individuare il multilingual user interface pack per il lcid configurato (italiano nel nostro caso) e non riuscendoci (non abbiamo il mui installato) scatena l'eccezione. La soluzione al problema è quella consigliata dall'articolo della KB:  installate il mui in italiano, oppure "riempire" il vostro codice di System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");.

In VBA il problema non si verifica perchè VBA "parla" sempre con l'object model di Excel utilizzando la localeID 1033.

Nella June CTP (di VSTO 2005) hanno aggiunto una funzionalità che rende il comportamento di vsto nei confronti di Excel simile a quello di VBA, come hanno fatto? Hanno aggiunto un transparent proxy fra il nostro codice e l'object model di Excel che imposta la lcid a 1033, pesante dite voi? E' quello che ho pensato anch'io e nella RTM di VSTO ci sarà infatti un attributo ExcelLocale1033 che se impostato a false disabiliterà il transparent proxy e riabiliterà l'eccezione :-). Quando metterlo a false? Se l'utente ha il mui installato ad esempio. Vi ricordo che questa nuova caratteristica è presente SOLO in VSTO 2005, qundi la vostra app WinForms che pilota via automation un foglio di excel continuerà a essere esposta al bug.