Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1780 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Probleme de Pied de Page d Excel par Automation, C++ ( VS6)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme de Pied de Page d Excel par Automation, C++ ( VS6)

n°1616467
domdelap
Posté le 28-09-2007 à 10:24:45  profilanswer
 

Bonjour,  
 
L'integration d'informations dans l'EnPied de Page d'une feuille Excel fait un peu n'importe quoi.  
Ce source pilote juste l'enpied de Page, il ne pose aucune valeur dans la feuille Excel.  
 
Dans l exemple joint  
j'essaie de mettre :  
le nom de fichier a gauche, ca marche (&F)  
la date et l heure au milieu, ca fait rien (&D &T)  
la page en cours et le nombre de page a droite (&N &P) , ca met la page en cours et ca remet le nom du fichier ( !!! )  
 
Je joins le source a integrer dans le Bouton OK d un projet MFC Dialog Based.  
La fonction AutoWrap a ete tirée telle quelle de MSDN  
 
Aucune erreur a la compil, aucune erreur a l execution.  
 
Les commandes en francais ( &N, &J, &H, &P, &T ) marchent, mais pas celles en Anglais sur un Excel 2000 Version francaise, or j aimerais une version internationale, et il me semble que les commandes anglaises marchent sous toutes les versions de langue.
 
Si quelqu'un a une idée...  
 
   
 
   
 
void CTestExcelDlg:nOK()  
{  
 
 // Initialise COM  
 CoInitialize(NULL);  
 
   
 
 // Lit le CLSID du serveur  
 CLSID clsid;  
 if(FAILED(CLSIDFromProgID(L"Excel.Application", &clsid)))  
 {  
  return ;  
 }  
 
 IDispatch * Excel_ID;  
 
 // Lance le serveur  
 if(FAILED(CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **) &Excel_ID)))  
 {  
  return ;  
 }  
 
 
 // Recupere les classeurs  
 COleVariant result;  
 AutoWrap(DISPATCH_PROPERTYGET, &result, Excel_ID, L"Workbooks", 0);  
 IDispatch * Classeurs_ID = result.pdispVal;  
 
   
 
 // Ajoute un classeur  
 AutoWrap(DISPATCH_PROPERTYGET, &result, Classeurs_ID, L"Add", 0);  
 IDispatch * Classeur_ID = result.pdispVal;  
 
 
 // Recupere la Feuille Courante  
 AutoWrap(DISPATCH_PROPERTYGET, &result, Classeur_ID, L"ActiveSheet", 0);  
 IDispatch * Feuille_ID = result.pdispVal;  
 
 // Recupere l'objet "pagesetup"  
 AutoWrap(DISPATCH_PROPERTYGET, &result, Feuille_ID, L"PageSetup", 0);  
 IDispatch * PageSetup_ID = result.pdispVal;  
 
 
 // Nom de fichier dans l'en pied gauche  
 CString cstrNomPropriete = "LeftFooter";  
 COleVariant ValeurCOleVariant = "&F";  
 USHORT * Tampon = cstrNomPropriete.AllocSysString();  
 AutoWrap(DISPATCH_PROPERTYPUT, NULL, PageSetup_ID, Tampon, 1, ValeurCOleVariant);  
 SysFreeString(Tampon);  
 
 // Date Heure  dans l'en pied central  
 cstrNomPropriete = "CenterFooter";  
 ValeurCOleVariant = "&D &T";  
 Tampon = cstrNomPropriete.AllocSysString();  
 AutoWrap(DISPATCH_PROPERTYPUT, NULL, PageSetup_ID, Tampon, 1, ValeurCOleVariant);  
 SysFreeString(Tampon);  
 
 // Page / Pages dans l'en pied droit  
 cstrNomPropriete = "RightFooter";  
 ValeurCOleVariant = "&P &N";  
 Tampon = cstrNomPropriete.AllocSysString();  
 AutoWrap(DISPATCH_PROPERTYPUT, NULL, PageSetup_ID, Tampon, 1, ValeurCOleVariant);  
 SysFreeString(Tampon);  
 
   
 // Sauvegarde  
 COleVariant CheminVariant = "C:\\essai.xls";  
 COleVariant Retour;  
 AutoWrap(DISPATCH_METHOD, &Retour, Feuille_ID, L"SaveAs", 1,  CheminVariant );  
 
 
 // Termine Excel  
 AutoWrap(DISPATCH_METHOD, NULL, Excel_ID, L"Quit", 0);  
 
 
 Feuille_ID->Release();  
 Classeur_ID->Release();  
 Classeurs_ID->Release();  
 Excel_ID->Release();  
 
}  
 
   
 
//  
// AutoWrap() - Automation helper function...  
//  
HRESULT AutoWrap(int autoType, COleVariant *pvResult, IDispatch *pDisp, LPOLESTR ptName, int cArgs...)  
{  
    va_list marker;  
    va_start(marker, cArgs);  
 
    ASSERT(pDisp!=NULL);  
 
    // Variables used...  
    DISPPARAMS dp = { NULL, NULL, 0, 0 };  
    DISPID dispidNamed = DISPID_PROPERTYPUT;  
    DISPID dispID;  
    HRESULT hr;  
    CString buf;  
    char szName[200];  
 
     
    // Convert down to ANSI  
    WideCharToMultiByte(CP_ACP, 0, ptName, -1, szName, 256, NULL, NULL);  
     
    // Get DISPID for name passed...  
    hr = pDisp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID);  
    if(FAILED(hr))  
 {  
  buf.Format(_T("IDispatch::GetIDsOfNames(\"%s\" ) failed w/err 0x%08lx" ), szName, hr);  
        MessageBox(NULL, buf, _T("AutoWrap()" ), 0x10010);  
        _exit(0);  
 
  va_end(marker);  
 
        return hr;  
    }  
     
    // Allocate memory for arguments...  
    COleVariant *pArgs = new COleVariant[cArgs+1];  
    // Extract arguments...  
    for(int i=0; i<cArgs; i++)  
 {  
        pArgs[i] = va_arg(marker, COleVariant);  
    }  
     
    // Build DISPPARAMS  
    dp.cArgs = cArgs;  
    dp.rgvarg = pArgs;  
     
    // Handle special-case for property-puts!  
    if(autoType & DISPATCH_PROPERTYPUT) {  
        dp.cNamedArgs = 1;  
        dp.rgdispidNamedArgs = &dispidNamed;  
    }  
 
     
    // Make the call!  
    hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, autoType, &dp, pvResult, NULL, NULL);  
 if(FAILED(hr)) {  
 
        buf.Format(_T("IDispatch::Invoke(\"%s\"=%08lx) failed w/err 0x%08lx" ), szName, dispID, hr);  
        TRACE(NULL, buf, _T("AutoWrap()" ), 0x10010);  
        return hr;  
    }  
    // End variable-argument section...  
    va_end(marker);  
     
    delete [] pArgs;  
     
    return hr;  
}  

mood
Publicité
Posté le 28-09-2007 à 10:24:45  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Probleme de Pied de Page d Excel par Automation, C++ ( VS6)

 

Sujets relatifs
Probleme de transfert de fichier via winsock appli Serveur/Clientsprobleme avec la fonction preg_match
Probleme de surcharge d'opérateur et de fonction amiesRécuperer nom bouton feuille excel
lancement automatique d'une macro à l'ouverture d'un classeur excel[easyphp] Probleme d'administration
problème flash cliquable sous IE6probleme de compilation sous KEIL
[RESOLU] Probleme pour augmenter un DIV en fonction d'un autreproblème XMLBeans sous eclipse
Plus de sujets relatifs à : Probleme de Pied de Page d Excel par Automation, C++ ( VS6)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR