Interface C/APIWin32 avec d'autres logiciels

Résolu
yepla75 Messages postés 34 Date d'inscription jeudi 19 octobre 2006 Statut Membre Dernière intervention 13 juin 2007 - 17 janv. 2007 à 12:12
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 17 janv. 2007 à 16:49
Salut,

Je sais pas trop si c'est la bonne place pour ce post, mais on va faire avec.

Dans mon programme en C/APIWin32, j'ai besoin d'ouvrir un ficher Excel, de le modifier et le sauvegarder.

Comment ouvrir le logiciel Excel ?

Plus généralement, comment appeler d'autres logiciels, et comment exécuter "à distance" certaines tâches de ces logiciels (par exemple appeler une macro sous Excel à partir de mon code en C) ?

Merci à vous

5 réponses

cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
17 janv. 2007 à 14:09
pour ouvrir un fichier ou executer une application il y a la fonction ShellExecute()
Bob...
"Vaut mieux se taire et passer pour un con, que de l'ouvrir et ne laisser aucun doute sur le sujet..."
3
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
17 janv. 2007 à 15:36
fait des recherches sur le site, y a des sources qui pourrait t'aider:
http://www.cppfrance.com/recherche.aspx?r=piloter+excel&tr=source

http://www.cppfrance.com/codes/ECRITURE-TEXTE-DANS-EXCEL_24952.aspx
http://www.cppfrance.com/codes/AUTOMATISER-EXCEL-SANS-MFC-NI-IMPORT_30147.aspx
Bob...
"Vaut mieux se taire et passer pour un con, que de l'ouvrir et ne laisser aucun doute sur le sujet..."
3
yepla75 Messages postés 34 Date d'inscription jeudi 19 octobre 2006 Statut Membre Dernière intervention 13 juin 2007
17 janv. 2007 à 14:47
Merci bob,

ShellExecute() permet d'ouvrir un fichier créé par une autre appli.

Question suivante : comment, à partir de mon code, exécuter des tâches de l'appli en question ?

Par exemple, une fois le fichier Excel ouvert, comment écrire une valeur dans la case A2 (mais pas manuellement), et sauvegarder le fichier "à distance" ?
0
yepla75 Messages postés 34 Date d'inscription jeudi 19 octobre 2006 Statut Membre Dernière intervention 13 juin 2007
17 janv. 2007 à 15:53
thanks my lord
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
17 janv. 2007 à 16:49
Salut,
En MFC c'est très facile, on utilise automation et COM,
il faut adapter cela en C.
Je ne l'ai jamais fait mais en gros :


1 : Utiliser les typeLib avec #import
ex : Microsoft Excel 11.0 Object Library <1.5>
#import "C:\\chemin\\typeLib.tbl"
 
// Excel propose des interfaces comme : _Application


MFC : Crée un wrapper pour l'objet _Application
CApplication m_app;


En C utiliser :
QueryInterface() sur _Application (il faut le CLSID)




LPDISPATCH pDisp;
LPUNKNOWN pUnk;
CLSID clsid;


::CLSIDFromProgID(L"Excel.Application.11", &clsid);


// Instance d'Excell en cours
if(::GetActiveObject(clsid, NULL, &pUnk) == S_OK)
{
 if( pUnk->QueryInterface(IID_IDispatch, (void**) &pDisp) == S_OK )
 {
   // Une instance d'Excel a été trouvé
          pUnk->Release();
 }
}
else
{
 // MFC
        if( !m_app.CreateDispatch("Excel.Application.11") )
        {
            // Erreur
        }
       else
         {
              // Une instance d'Excel a été crée
         }
}


// MFC
CWnd* pWnd = CWnd::FindWindow("XLMAIN", NULL);
if( pWnd )
{
 pWnd->ShowWindow(SW_SHOWNORMAL);
        pWnd->UpdateWindow();
        pWnd->BringWindowToTop();
}
m_app.put_SheetsInNewWorkbook(1);




Donc il faut trouver les équivalences en C.
Bonne continuation.


 
0
Rejoignez-nous