2010-01-04 10 views
12

Sono un novizio con add-in di programmazione e bisogno di aiuto con il seguente scenario:componente aggiuntivo di automazione vs COM Add-in

Ho un'automazione C# Excel add-in che richiama alcuni UDF s. Voglio fare un controllo di nome utente e password durante il caricamento dei componenti aggiuntivi di automazione per i quali una schermata in cui l'utente può inserire i suoi dettagli deve apparire al caricamento del componente aggiuntivo. Come può essere fatto usando un componente aggiuntivo di automazione?

In che modo la gestione degli eventi può essere eseguita in generale utilizzando i componenti aggiuntivi di automazione? Voglio fare alcuni calcoli quando l'utente preme F9 per calcolare la formula UDF in alcune celle.

Esistono articoli che illustrano la gestione degli eventi nei componenti aggiuntivi di automazione?

risposta

25

I componenti aggiuntivi di automazione, in generale, non sono progettati per gestire questo tipo di funzionalità. Puoi avere il tuo add-in implementare IDTExtensibility2 per ottenere un riferimento all'oggetto 'Excel.Application' in cui è in esecuzione il tuo componente aggiuntivo. Da lì, puoi accedere a tutti gli eventi della classe 'Excel.Application'. Ma un componente aggiuntivo di automazione non è generalmente progettato per gestire gli eventi del modello di oggetti Excel: è progettato per supportare solo le funzioni definite dall'utente (UDF).

voglio fare un nome utente e una password controllo durante, quando il componente aggiuntivo di automazione carichi per i quali una schermata in cui l'utente possono inserire i propri dati deve apparire sul carico della aggiungere. Come può essere fatto usando un addin di automazione?

Attenzione al tentativo di agire quando il componente aggiuntivo di automazione carica i primi carichi. Un componente aggiuntivo di automazione è caricato a richiesta, il che significa che non viene caricato fino a quando non è necessario da Excel. In genere viene caricato quando l'utente inizia a immettere la prima funzione definita dall'utente (UDF) del componente aggiuntivo di automazione in una cella. Il problema è che la maggior parte dei comandi programmatici non riuscirà quando si tenta di eseguire mentre l'utente sta ancora modificando la cella. Pertanto, se si tenta di intraprendere tali azioni quando il componente aggiuntivo viene caricato per la prima volta, è probabile che si stia caricando mentre Excel è in una modalità che non consente il corretto funzionamento del codice. (Per ulteriori informazioni, vedere: Excel fails when Automation add-In loads.)

Per ovviare a questo problema, è possibile utilizzare invece un componente aggiuntivo COM gestito, progettato per gestire gli eventi del modello di oggetti Excel. Il tuo add-in COM gestito potrebbe anche caricare il tuo componente aggiuntivo di automazione, se lo desideri; oppure la classe del componente aggiuntivo COM gestito e la classe del componente aggiuntivo di automazione potrebbero risiedere entrambi nello stesso assembly, nel qual caso potrebbero comunicare direttamente.

In che modo la gestione degli eventi può essere eseguita nel generale utilizzando i componenti aggiuntivi di automazione? I si desidera eseguire alcuni calcoli quando l'utente preme F9 per calcolare la formula udf in alcune celle.

Rilevare quando si preme il tasto F9 può essere effettuato sottoscrivendo l'evento "Excel.Application.SheetCalculate", che si attiva ogni volta che un foglio di lavoro ha completato il calcolo. Il calcolo, in questo caso, potrebbe essere attivato per qualsiasi motivo, non solo per il tasto F9. Se si desidera intercettare specificamente la chiave F9, sarà necessario utilizzare la funzione di callback "Application.OnKey", che è disponibile solo tramite VBA. È tuttavia possibile esporre una classe nel progetto in COM e chiamarla da un componente aggiuntivo VBA richiamato dall'evento 'Application.OnKey'.

Per gli articoli su di automazione componenti aggiuntivi, vedere:

Per articoli sul gestiti componenti aggiuntivi COM, vedere:

Per gli articoli sia per quanto riguarda componenti aggiuntivi COM e automazione componenti aggiuntivi, vedere:

Per articoli riguardanti l'uso di un VBA aggiuntivo che chiama l'applicazione gestita, si veda:

So che questo è molto da digerire, ma spero che questo possa farti andare avanti. Nel complesso, consiglierei un componente aggiuntivo COM gestito per gestire la funzionalità dell'interfaccia utente. I dati salvati dal componente aggiuntivo COM gestito possono essere condivisi facilmente con l'add-in di automazione, facendo in modo che entrambi i componenti aggiuntivi facciano riferimento ad un assembly comune oppure facendo in modo che sia la classe del componente aggiuntivo COM gestito sia l'aggiunta di automazione. in classe tenuto all'interno della stessa assemblea.

Spero che questo aiuti, e per favore chiedi se vuoi che chiarisca qualcosa di più.

- Mike

Follow-Up Reply:

Grazie mille per i collegamenti e puntatori. Ho esaminato i collegamenti e ho una buona idea di cosa deve essere fatto :) :)

Felice che sia d'aiuto. :) È un sacco di letture, ti suggerisco di stamparle e leggerle tutte. Stai cercando di fare qualcosa che sia abbastanza avanzato, quindi più conosci l'argomento, meglio sarà.

Se si utilizza un add-in basato su COM per gestire i miei eventi excel, come faccio a incorporare le mie funzioni UDF?

Un componente aggiuntivo COM gestito non può esporre le funzioni UDF.Avresti comunque bisogno di un add-in di automazione per questo. Tuttavia, la classe del componente aggiuntivo COM gestito e la classe del componente aggiuntivo di automazione potrebbero essere entrambi nello stesso assembly, se lo si desidera. Pertanto, il componente aggiuntivo COM potrebbe chiedere all'utente le informazioni necessarie e questi valori saranno disponibili per il componente aggiuntivo di automazione quando vengono eseguite le UDF al suo interno.

Saranno esposti come normali funzioni nel riquadro formula simile al caso di utilizzo di un addin di automazione?

Le UDF esposte dal componente aggiuntivo di automazione verranno incluse automaticamente nella procedura guidata "Inserisci funzione", sotto una categoria corrispondente al nome del componente aggiuntivo di automazione. La descrizione, tuttavia, non includerà automaticamente tutte le informazioni fornite per le funzioni incorporate di Excel. La funzionalità predefinita di solito è soddisfacente, ma se si desidera fornire informazioni più complete per la procedura guidata "Inserisci funzione", questo è un argomento complesso. Vedi: Excel 2007 UDF: how to add function description, argument help.

dire che ho bisogno di chiamare un getcube formula che restituisce il cubo di un numero public double getcube (doppia a) {return a * a * a; }

Quando il mio addin utilizza sia l'interfaccia personalizzata che definisce le mie UDF e IDTExtensibility2, come posso gestire un caso del genere? Puoi spiegare questo caso con un esempio?

Finora, non vedo alcuna necessità di implementare IDTExtensibility2 in base a ciò che si mostra qui, è necessario solo un componente aggiuntivo di automazione standard. Per un componente aggiuntivo di automazione standard, è necessario leggere Writing user defined functions for Excel in .NET e Writing Custom Excel Worksheet Functions in C#. Per una discussione su come implementare IDTExtensibility2 per un componente aggiuntivo COM gestito, vedere Implementing IDTExtensibility2 in an Automation Add-in.

C'è un modo per implementare solo l'IDTExtensibility2 sul componente aggiuntivo di automazione per ottenere l'accesso all'oggetto Excel.Application o dovrei creare un componente aggiuntivo COM separata per questo?

È assolutamente possibile implementare IDTExtensibility2 direttamente all'interno del vostro componente aggiuntivo di automazione, non c'è bisogno di creare una gestione COM add-in per questo. Ancora, vedi, Implementing IDTExtensibility2 in an Automation Add-in. Ciò che si desidera ottenere, tuttavia, è utilizzare la gestione degli eventi rispetto al modello a oggetti di Excel. Mentre questo potrebbe essere fatto usando un add-in di automazione, è non standard e non è il tipo di compito che un componente aggiuntivo di automazione è progettato per fare. In particolare, si desidera avere le informazioni di input dell'utente quando i componenti aggiuntivi di automazione vengono caricati per primi; questa può essere una situazione particolarmente complicata, motivo per cui raccomando di utilizzare un componente aggiuntivo COM gestito per questa attività. Per ulteriori informazioni, vedere Excel fails when Automation add-In loads.

Per chiarire, i componenti aggiuntivi COM gestiti e gli add-in di automazione sono solo classi che sono state rese COM-visibili e sono registrate correttamente. Non c'è motivo per cui queste due classi non possano esistere all'interno della stessa assemblea. Inoltre, poiché sembra che la tua funzionalità includa sia le UDF sia la gestione degli eventi del modello a oggetti di Excel, un singolo assembly che include sia un componente aggiuntivo COM gestito che un componente aggiuntivo di automazione ti consentirebbe di gestire tutte le funzionalità che cerchi il modo in cui Excel si aspetta.

So che questo è molto da digerire, ma se leggete con attenzione gli articoli che ho suggerito qui, credo che possa dare un senso ...

Mike

+0

Grazie mille. Le cose hanno lentamente iniziato a chiarire. Sono ancora bloccato alla parte di avere sia il mio addin di automazione e il com addin nello stesso assembly. Puoi forse spiegarlo con un esempio in modo che lo capisca meglio? – Sandy

+0

Non devono essere. Ciascuna è una classe separata. Se lo si desidera, è possibile posizionare ogni classe di componente aggiuntivo in un assieme separato e quindi fare in modo che entrambi gli assiemi facciano riferimento a un terzo assieme. Nel tuo caso, penso che sia più semplice semplicemente mettere sia la classe del componente aggiuntivo di automazione sia la classe del componente aggiuntivo COM gestito all'interno dello stesso assembly. Seguire i resoconti su come creare un componente aggiuntivo COM gestito, che utilizza una procedura guidata. Quindi segui i resoconti su come creare una classe add-in di automazione, ma metti la classe add-in di automazione all'interno dello stesso assembly del componente aggiuntivo COM gestito. E 'davvero così semplice. –

+0

@MikeRosenblum Attualmente sto lavorando al progetto del componente aggiuntivo di automazione Excel e ho alcuni problemi. Il mio UDF richiede di recuperare i dati tramite il servizio web, quindi ci saranno preoccupazioni circa i problemi di prestazioni. Se lo faccio in modo sincrono, l'app client di Excel si bloccherà. Quindi la mia domanda qui è: come possiamo scrivere una UDF che può chiamare metodi web ** in modo asincrono **? Potresti darmi dei consigli, Mike? Grazie mille. – woodykiddy

Problemi correlati