IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Probleme pour remplir le pied de page Excel a partir de VC++ 6.0


Sujet :

Windows

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Probleme pour remplir le pied de page Excel a partir de VC++ 6.0
    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;
    }

  2. #2
    Membre averti Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Points : 442
    Points
    442
    Par défaut
    Quelle version de Excel utilises tu parce que dans la mienne (2003 en français) les raccourcis ne sont pas les mêmes :
    le nom de fichier : &N
    la date et l'heure : &J &H
    la page en cours et le nombre de page : &P &T
    Mais il vaut mieux utiliser les constantes complètes : &[Page], &[Date] etc.

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    La mienne est 2000 en Francais aussi.

    J ai pris tes raccourcis, ils marchent tres bien en effet. Donc un grand merci.
    Toutefois, je pensais que l'esprit Microsoft était que les commandes anglaises sont standard, donc fonctionnent partout, quelque soit la langue de la version utilisée.

    D'autre part, l'enregistrement de macro sous l'Excel que j utilise, pour effectuer une mise en page equivalente donne bien les valeurs &D &T etc...
    Et cette macro fonctionne parfaitement :

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


    Nos clients etant internationaux, j aimerais autant une liste de commande qui marchent partout.

  4. #4
    Membre averti Avatar de pascal.barbier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2007
    Messages : 362
    Points : 442
    Points
    442
    Par défaut
    Vas voir à Code PageSetup Excel

    Les codes fournis dans cet fiche sont internationaux

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Oui, je sais .C'est ceux dont je me sers et qui ne fonctionnent pas avec mon Excel. Les tiens marchent tout a fait mieux mais n'ont pas le caractere international que je recherche.

Discussions similaires

  1. [Débutant] probleme pour remplir les champ d un page web
    Par fred92g dans le forum VB.NET
    Réponses: 2
    Dernier message: 28/12/2013, 13h29
  2. Problème pour exporter une table Access vers Excel
    Par PAULOM dans le forum Access
    Réponses: 22
    Dernier message: 02/05/2006, 13h42
  3. [VB]infos complémentaires pour l'impression d'une page excel avec vb
    Par Jacen dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 25/04/2006, 15h57
  4. Réponses: 4
    Dernier message: 18/10/2005, 15h21
  5. [VB.Net] Probleme pour remplir un DropDownList
    Par angelevil dans le forum ASP.NET
    Réponses: 2
    Dernier message: 02/03/2005, 17h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo