Interface C/APIWin32 avec d'autres logiciels [Résolu]

Signaler
Messages postés
34
Date d'inscription
jeudi 19 octobre 2006
Statut
Membre
Dernière intervention
13 juin 2007
-
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
-
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

Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
10
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..."
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
10
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..."
Messages postés
34
Date d'inscription
jeudi 19 octobre 2006
Statut
Membre
Dernière intervention
13 juin 2007

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" ?
Messages postés
34
Date d'inscription
jeudi 19 octobre 2006
Statut
Membre
Dernière intervention
13 juin 2007

thanks my lord
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
21
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.