Macro complémentaire d'Automation vs COM add-in
je suis un internaute novice avec la programmation add-in et j'ai besoin d'aide avec le scénario suivant:
j'ai un C# automatisation d'Excel add-in qui appelle quelques UDF
s. Je veux faire un nom d'utilisateur et le mot de passe de vérifier lors de l'automatisation complément charge pour lequel un écran où l'utilisateur peut entrer ses coordonnées doivent apparaître sur la charge de l'add-in. Comment cela peut-il être fait en utilisant un add-in d'automatisation?
comment gérer un événement en général en utilisant les addins d'automatisation ? J'en veux les calculs à faire lorsque l'utilisateur appuie sur F9 pour calculer la formule UDF dans certaines cellules.
y a-t-il des articles qui expliquent le traitement des événements dans les add-ins d'automatisation?
1 réponses
les add-ins D'automatisation, en général, ne sont pas conçus pour traiter ce genre de fonctionnalité. Vous pouvez avoir votre Add-in implémenter IDTExtensibility2 afin d'obtenir une référence à L'Excel.Application ' objet dans lequel votre add-in est en cours d'exécution. De là, vous pouvez accéder à tous les événements du 'Excel.L'Application en classe. Mais un add-in d'automatisation n'est généralement pas conçu pour gérer les événements de modèle D'objet Excel -- il est conçu pour prendre en charge les fonctions définies par l'utilisateur (UDFs) seulement.
je veux faire un nom d'utilisateur et mot de passe vérifiez lors de l'automatisation de complément charges pour lesquelles un écran l'utilisateur peut entrer ses données doit apparaître sur la charge de l'ajouter dans. Comment peut-il être fait en utilisant un addin d'automatisation?
méfiez-vous de tenter de prendre des mesures lorsque votre automation ajoute-dans les premiers chargements. Un add-in d'automatisation est chargé à la demande, ce qui signifie qu'il n'est pas chargé jusqu'à ce qu'il soit nécessaire par Excel. Il se chargera généralement lorsque l'utilisateur commence à entrer première fonction UDF (user-defined function) de votre automation add-in dans une cellule. Le problème est que la majorité des programmatique commandes échoue lorsque vous tentez d'exécuter lorsque l'utilisateur est encore l'édition de la cellule. Par conséquent, si vous tentez de prendre de telles mesures lorsque votre add-in se charge en premier, il y a de bonnes chances qu'il se charge alors que Excel est dans un mode qui ne permettrait pas à votre code de s'exécuter en toute sécurité. (Pour plus de détails, voir: Excel ne fonctionne pas lorsque L'automatisation s'ajoute charges.)
pour contourner ce problème, vous pouvez utiliser un add-in managed COM à la place, qui est conçu pour gérer les événements Excel object model. Votre managed COM add-in peut même charger votre automation add-in, si vous le souhaitez; ou la classe managed COM add-in et la classe automation add-in peuvent toutes deux résider dans le même assemblage, auquel cas elles peuvent communiquer directement.
comment gérer un événement utilisation générale des addins d'automatisation ? Je vouloir quelques calculs à faire quand l'utilisateur appuie sur F9 pour calculer le formule udf dans certaines cellules.
la détection du moment où la touche F9 est activée peut être effectuée en s'abonnant au 'Excel.Application.SheetCalculate ' événement, qui se déclenche chaque fois que n'importe quelle feuille de travail a terminé le calcul. Le calcul, dans ce cas, pourrait être déclenché pour n'importe quelle raison -- pas seulement pour appuyer sur la touche F9. Si vous souhaitez piéger la touche F9 spécifiquement, alors vous devez faire usage de la "Application.OnKey ' callback, qui n'est disponible que via VBA. Vous pouvez, cependant, exposer une classe dans votre projet à COM et l'avoir appelé à partir D'un VBA add-in qui est rappelé de l '" Application.Onkey'event.
Pour les articles sur l'automatisation des compléments, voir:
- écrire des fonctions définies par L'utilisateur pour Excel dans .NET
- écrire des fonctions de feuille de travail Excel personnalisées dans C#
- la mise en Œuvre de IDTExtensibility2 dans un Add-in D'automatisation
- Excel échoue lorsque L'automatisation ajoute des charges
- comment déployer un Add-in .net Automation via un pack de configuration Visual Studio
Pour les articles sur les compléments COM, voir:
- comment construire un Add-in Office COM en utilisant Visual C#.
- construction de Microsoft Office Add-ins avec Visual C# .NET et Visual De base .NET
Pour les articles concernant à la fois le COM add-ins et de l'automatisation des compléments, voir:
- Excel COM add-ins et de l'Automatisation des compléments
- construire et déployer une assemblée COM. net
pour les articles traitant de L'utilisation D'un add-in VBA qui appelle votre application gérée, voir:
- un simple C # DLL-comment l'appeler à partir D'Excel, Access, VBA, VB6?
- comment créer Excel UDFs dans le code géré par VSTO
- appeler un composant .NET à partir d'un composant COM
je sais que c'est beaucoup de choses à digérer, mais j'espère que cela peut vous aider à aller. Dans l'ensemble, je recommande un com géré add-in pour gérer votre fonctionnalité d'interface utilisateur. Les données sauvegardées par l'add-in managed COM peuvent être facilement partagées avec l'add-in automation, soit en ayant les deux add-in référez-vous à une assemblée commune, ou en ayant à la fois la classe managed COM add-in et la classe automation add-in tenue dans la même assemblée.
j'espère que cela aidera, et s'il vous plaît demandez si vous voulez que je clarifie quoi que ce soit.
-- Mike
Suivi De La Réponse:
Merci beaucoup pour les liens et pointeurs. J'ai parcouru les liens et j'ai une bonne idée de ce qui doit être fait.:)
Content que ça aider. :) C'est beaucoup de lecture, je vous conseille de les imprimer et de les lire tous. Vous cherchez à faire quelque chose qui est assez avancé, de sorte que le plus vous en savez sur le sujet, le mieux vous serez.
si j'utilise un addin COM pour gérer mes évènements excel, comment intégrer mes fonctions UDF?
un add-in managé COM ne peut pas exposer les fonctions UDF. Vous auriez encore besoin d'une macro complémentaire d'automation. Cependant, votre classe managed COM add-in et votre classe d'automation peut être dans le même assemblage, si vous le souhaitez. Par conséquent, votre COM add-in pourrait demander à l'utilisateur les informations dont vous avez besoin, et ces valeurs seraient disponibles pour l'automatisation de complément lorsque l'Udf en son sein.
seront-ils exposés comme des fonctions normales dans le volet de formule semblable au cas de l'utilisation d'un addin d'automatisation?
les UDFs exposés par votre Add-in d'automatisation seront inclus dans le L'Assistant' Insert Function ' (insérer une fonction) automatiquement, dans une catégorie correspondant au nom de votre ajout automatique. La description, cependant, n'inclura pas automatiquement autant d'information que celle fournie pour les fonctions intégrées D'Excel. La fonctionnalité par défaut est généralement bonne, mais si vous souhaitez fournir des informations plus complètes pour L'Assistant 'Insert Function', c'est un sujet complexe en soi. Voir: Excel 2007 UDF: comment ajouter une description de fonction, Aide d'argument.
dire que je dois appeler une formule getcube qui renvoie le cube d'un nombre public double getcube (double a) { return a * a * a;}
lorsque mon addin utilise à la fois l'interface personnalisée qui définit mes UDFs et IDTExtensibility2, comment gérer un tel cas? Pouvez-vous nous expliquer ce cas avec un exemple?
Jusqu'à présent, Je ne vois aucun besoin de mettre en œuvre IDTExtensibility2 basé sur ce que vous montrez ici, vous avez seulement besoin d'un automation Standard add-in. Pour un ajout d'automatisation standard, vous devriez lire l'Écriture de fonctions définies par l'utilisateur pour Excel .NET et écrire des fonctions de feuille de travail Excel personnalisées dans C#. Pour une discussion sur la façon de mettre en œuvre IDTExtensibility2 pour un add-in managé COM, voir implémentation de IDTExtensibility2 dans un Add-in D'automatisation.
y a-t-il un moyen d'implémenter simplement L'IDTExtensibility2 sur l'automation addin pour accéder à L'Excel.Objet de l'Application ou devrais-je créer un COM addin?
absolument implémenter IDTExtensibility2 directement dans votre Add-in d'automatisation, il n'est pas nécessaire de créer un add-in com géré pour cela. Encore une fois, voir implémentation de IDTExtensibility2 dans un Add-in D'automatisation. Ce que vous souhaitez réaliser, cependant, est d'utiliser la gestion d'événements contre le modèle D'objet Excel. Bien que cela puisse être fait en utilisant un add-in d'automatisation, il est non-standard et n'est pas le genre de tâche pour laquelle un système d'automatisation est conçu. En particulier, vous souhaitez avoir les informations d'entrée de l'utilisateur lorsque l'automatisation ajoute - dans les premiers chargements; cela peut être une situation particulièrement délicate, c'est pourquoi je recommande que vous utilisez un com géré add-in pour cette tâche. Pour plus de détails, voir Excel échoue lorsque L'automatisation ajoute des charges.
pour clarifier, les add-ins com gérés et les add-ins automation sont simplement des classes qui ont été rendues COM-visible et sont correctement enregistrés. Il n'y a aucune raison pour que ces deux classes ne puissent exister au sein de la même assemblée. Et comme il semble que vous souhaitiez que vos fonctionnalités incluent à la fois la gestion D'événements UDFs et Excel, un seul assemblage comprenant à la fois un add-in managé et un add-in automatique vous permettrait de gérer toutes les fonctionnalités que vous recherchez de la manière qu'Excel attend.
je sais que c'est beaucoup de choses à digérer, mais si vous lisez attentivement les articles que j'ai suggéré ici, je pense qu'il aura du sens...
Mike