Domanda

Stiamo creando un'applicazione Windows Form (C # o VB.NET) che deve fare riferimento a un oggetto COM di Office 2003 o Office 2007, a seconda della versione di Office installata. Qual è il modo migliore per gestire questo scenario e fare riferimento all'oggetto COM corretto in fase di esecuzione?

È stato utile?

Soluzione

A meno che non si desideri utilizzare uno qualsiasi degli oggetti e dei metodi appena aggiunti del modello a oggetti di Office 2007, è opportuno creare un riferimento alle PIA di Office 2003, assicurarsi solo che la versione corretta delle PIA sia distribuita sul sistema di destinazione:

  

Un altro modo per aggirare questo problema è rimuovere la dipendenza dalle PIA successive. A causa dell'elevato grado di compatibilità con le versioni precedenti di Office, puoi tranquillamente supporre che se il tuo componente aggiuntivo funziona su Office 2003 (con i PIA di Office 2003), dovrebbe funzionare anche su Office 2007 (con i PIA di Office 2007).

     

(da Componenti aggiuntivi per versioni Office multiple senza PIA di Andrew Whitechapel)

Altrimenti ti consiglierei i seguenti articoli del blog di Andrew Whitechapel: Puoi creare un componente aggiuntivo per più versioni di Office? (Vedi l'avvertimento BIG che questo non è ufficialmente supportato da Microsoft).

Un'altra opzione in cui non sono necessari i PIA (questo rende molto più semplice l'implementazione) sarebbe quella di utilizzare ComImport insieme all'associazione tardiva. Ciò è tuttavia più lento rispetto all'utilizzo degli assembly di interoperabilità, ma se il codice di automazione non si trova sul percorso rapido, questa potrebbe essere una buona soluzione. Troverai una spiegazione su come implementarlo nello stesso post del blog: Componenti aggiuntivi per versioni multiple di Office senza PIA

Altri suggerimenti

Gli assiemi di interoperabilità primaria per Office non aiuterebbero in questo? Non lo so per certo perché non ho dovuto usarli sul serio, ma penso che lo farebbero.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top