2008-10-22 17 views
5

Je suis en train de créer une fonction "Importer depuis Excel". Il doit être dans une DLL, appelée à partir d'une application non-MFC. Doit fournir une image de la feuille de calcul dans laquelle les utilisateurs peuvent faire glisser une zone de sélection (pour sélectionner des cellules), puis cliquer sur un bouton IMPORT et faire en sorte que la bonne chose se produise. Avoir de la difficulté à obtenir la feuille de calcul, avoir un bouton adjacent à elle et l'avoir dans une DLL.J'ai besoin d'un contrôle ActiveX pour intégrer Excel dans une boîte de dialogue

Je suis allé la route d'une boîte de dialogue MFC à l'intérieur d'une DLL, mais a été bloquée en essayant d'ouvrir un client OLE pour Excel sur une fenêtre sur la boîte de dialogue. Seul le support que j'ai trouvé pour afficher Excel en utilisant OLE nécessitait un SDI. J'ai réussi à faire fonctionner les fonctions d'automatisation, et j'ai pu lire les cellules et en faire une "fausse image" dans ma boîte de dialogue ... mais je crains que cela ne soit pas conforme à mes exigences. J'ai donc essayé de créer un SDI. J'ai été capable de créer un SDI qui a présenté Excel en tant que client OLE. J'ai été capable de gérer l'événement "changement de sélection", et d'aller les données de la cellule dont j'avais besoin. J'ai été déjoué par 2 points:

  1. Impossible de faire fonctionner ce SDI dans une DLL MFC. Crash dans le constructeur CWinApp, affirmant que l'AfxGetThread n'était pas nul. Déplacé "theApp" pour être localement étendu dans la fonction DLL exportée unique, mais ne pouvait toujours pas le faire fonctionner, mais avec des symptômes différents: écrasé lors de l'ajout AFX_MANAGE_STATE (AfxGetStaticModuleState()); à la fonction DLL exportée, si je n'ai pas utilisé cela, l'OnInitInstance n'a jamais été entré. J'ai essayé d'ajouter un appel à la fonction Run() de l'application, mais cela n'a pas aidé. Je peux poster ce code si quelqu'un pense avoir une idée du problème.

  2. Impossible de présenter une barre d'outils lorsque l'élément client Excel était actif. Je pourrais mettre mon "importation" (et d'autres options) sur la barre de menu en haut, mais ce n'est pas assez évident. Même une barre d'outils flottante a été fermée. Il est logique que cela se fasse, car il serait déroutant d'avoir une barre d'outils présente qui ne pourrait pas agir sur l'élément actuellement actif ... mais dans mon cas, c'est un problème.

Alors maintenant, je pense que je dois revenir à l'approche de dialogue et intégrer un contrôle ActiveX qui met en place un fichier tableur Excel pour importer. Doit me permettre de gérer l'événement de changement de sélection, ou doit me permettre de trouver quelles cellules sont sélectionnées (ou ont été récemment sélectionnées si cliquer sur le bouton "importer" dans ma boîte de dialogue désélectionne les cellules sélectionnées).

Il doit également être assorti de conditions de licence raisonnables, car celles-ci seront utilisées dans une application commerciale largement accessible au public.

Si quelqu'un connaît une «solution miracle» à l'une ou l'autre des approches que j'avais essayées, cela serait également utile.

J'espère que quelqu'un peut m'aider!

Répondre

0

Si vous voulez simplement intégrer Excel, vous n'avez besoin de rien. Il suffit de l'incorporer dans un contrôle hôte OCX standard.

+0

Bonjour Fred. Je ne suis pas familier avec ce contrôle. Google affiche un tas de références d'applications tierces, et dans VS, cliquer avec le bouton droit sur ma boîte de dialogue puis sélectionner "Insérer contrôle Active X ..." n'a rien qui ressemble au contrôle d'OCX Host. Pouvez-vous me pointer dans la bonne direction? Merci beaucoup!! – Steve

+0

Oups !! Mes excuses! Désolé, Mikea! Je ne sais pas d'où vient le nom "Fred". Trop multitâche. – Steve

+0

J'ai trouvé le contrôle Microsoft DSOFramer, un exemple OCX qu'ils fournissent avec les applications Office. Je ne sais pas si c'est ce que vous suggérez, mais cela m'a permis d'être là où je devais être. Merci encore! – Steve