begin process at 2012 05 29 15:55:47
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

ActiveX / COM

 > 

Pied de Page Excel


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Pied de Page Excel

mercredi 26 septembre 2007 à 10:12:09 | Pied de Page Excel

DominiquedeLapasse

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'enpiied 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.

Si quelqu'un a une idée...

 

 

void CTestExcelDlg::OnOK()
{

 // 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;
}

mercredi 26 septembre 2007 à 16:59:59 | Re : Pied de Page Excel

SnOOpss

Moi perso je n'utilise pas CString , sinon  j'ai jamais testé les pieds de page, dsl.
    VARIANT parm;
    VariantClear(&parm);
    parm.vt = VT_BSTR;
    parm.bstrVal = SysAllocString(str);

    AutoWrap(DISPATCH_PROPERTYPUT, NULL, pXlSheet, L"Name", 1, parm);

    SysFreeString(parm.bstrVal);
    VariantClear(&parm);
mercredi 26 septembre 2007 à 17:24:01 | Re : Pied de Page Excel

DominiquedeLapasse

Merci de votre réponse

J ai aussi essaye comme le bout de code plus bas, avec des variants, proches de votre code
Le plus fort c est que une chaine libre ( genre toto ) va parfaitement la ou on veut
Mais &D &T ( pour Date et Heure )   ne passe pas.

J ai meme essayé de doubler les & : &&D && T.
Et ca donne &[Page] &[Fichier] dans l enpied !!!

Si vous avez 5 minutes pour essayer d'integrer le bout de code suivant dans votre source :)
Cordialement
Dominique


  IDispatch * PageSetup_ID;
   {

    VARIANT result;
    VariantInit(&result);

 // Recupere l'objet "pagesetup"
 AutoWrap(DISPATCH_PROPERTYGET, &result, pXlSheet, L"PageSetup", 0);
 PageSetup_ID = result.pdispVal;


 // Date Heure  dans l'en pied central
    VARIANT parm;
    parm.vt = VT_BSTR;
    parm.bstrVal = ::SysAllocString(L"&D &T");
  AutoWrap(DISPATCH_PROPERTYPUT, NULL, PageSetup_ID, L"CenterFooter", 1, parm);
    VariantClear(&parm);

   }


 

mercredi 26 septembre 2007 à 18:45:05 | Re : Pied de Page Excel

SnOOpss

Ben apres mes test ca marche avec
parm.bstrVal = SysAllocString(L"&[Date]");
mais je suis obligé de valider mes pied de page perso dans excel a la main pour que cela marche sinon ca m'affiche "Date]".

En fait ces commandes modifient le combobox de pied de page preselectionné en mettant n'importe quoi et les pieds de pages personnalisés mais necessite une validation.

Ps: j'ai une vielle version d'excel mais normallement ca influe pas trop.
mercredi 26 septembre 2007 à 19:11:06 | Re : Pied de Page Excel

DominiquedeLapasse

Effectivement ce sont les commandes  &D, &T, &N etc qui n ont pas l air de bien passer a 100 %
Elles sont interpretés je ne sais pas comment.
Le truc qui marche , c est &F a gauche , et &N a doite
Mais mon client veut plus :(

Merci quand meme d avoir essayé

Dominique
mercredi 26 septembre 2007 à 20:16:51 | Re : Pied de Page Excel

SnOOpss

Pourquoi tu essayes pas avec &[Date]&[Heure]&[Chemin d'accès]&[Fichier] celle la marchent chez moi mais il reste a valider et la je connais pas les commandes pour l automation.
jeudi 27 septembre 2007 à 16:14:40 | Re : Pied de Page Excel

DominiquedeLapasse

Je vais essayer, oui.
 
Mais j aimerais comprendre pourquoi la forme preconisée marche pas, pour :
1 ) le principe,
2 ) la portabilité vers un Excel eventuellement etranger, nos softs etant multilangues.
jeudi 27 septembre 2007 à 17:47:12 | Re : Pied de Page Excel

SnOOpss

Ben j'ai cherché partout j'ai pas trouvé ou ca parlait de &D chez moi sa s'apelle &[date], tu as quoi comme version d'excell ?
Il ont peut etre justement preferé garder les vielles balises plus compatibles.
vendredi 28 septembre 2007 à 07:15:24 | Re : Pied de Page Excel

DominiquedeLapasse

J ai la version Excel 2000.

Si tu enregistres une macro sous Excel qui fait une mise en page des pieds de page et si tu l edites ensuite tu verras par exemple :

    With ActiveSheet.PageSetup
       .LeftFooter = "&D &T"
       .CenterFooter = "&P &N"
       .RightFooter = "&F &A"

Ce sont les codes a envoyer.
J aiessayé ton astuce, ca met Date], en effet. Je peux pas livrer ca :)


Cette discussion est classée dans : excel, id, hr, autowrap, dispatch


Répondre à ce message

Sujets en rapport avec ce message

Exportations de données vers Word ou Excel [ par sebastien ] Bonjour, je suis étudiant (débutant en informatique) et dans le cadre de mon cours d'informatique je dois réaliser une petite application Base de donn Tracer un graphique sous Excel [ par BennyB ] G développé un petit exe en C qui permet d'effectuer toutes sortes de ping et je stocke les informations ds un fichier txt et mnt je voudrasi arriver Tracer un graphique sous Excel sans l'assistant [ par BennyB ] G développé un petit exe en C qui permet d'effectuer toutes sortes de ping et je stocke les informations ds un fichier txt et mnt je voudrasi arriver probleme sous excel [ par Hicks ] Bonjour a tous g un petit probleme sur excel et je n' y connais rien a ce programme....si quelqu' un pouvais m' aider....Mon étude se porte sur la ges Tableau de type feuille Excel [ par pde ] Comment créer en C++ un tableau de type feuille Excel, comportant des lignes et des colonnes, dans un contrôle ou une vue ? plus de precisions pour la communication multiple stp !!! [ par Xs ] salut !bon, recement, j'ai posté un msg demandant comment faire plusieurs boites de dialog(cf : plusieurs dialogs [API])bon, comme dit, ca marche.mais mode d'ouverture de data base en vc++ [ par f1cobra ] J'arrive pas a ecrire dans ma base de donnéesCDialogueReservation Reservation;m_pPoint = new CSalleSet;m_pPoint->Open();//pour etre sur de ce q tu fai


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,359 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales