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

MFC Discussion :

[VC++6.0>MFC]Automation, Word, Entetes et Sauvegardes


Sujet :

MFC

  1. #1
    doccpu
    Invité(e)
    Par défaut [VC++6.0>MFC]Automation, Word, Entetes et Sauvegardes
    J'utilise Word 2000, VC++6.0 et la version 9 de la lib office.

    j'ai un fichier word avec des champs inclus de type QUOTE
    exemple : Inserer-> champs -> QUOTE "[MOTCLE]"

    en fait j'ai ce type de champs un peu partout dans le document y compris dans les entetes et pieds de pages.

    J'arrive a ouvrir word, le doccument a remplacer le texte des champs en les retrouvant grace au texte de leur codage, a sauvegarder le doccument et a fermer le document a partir de VC++6.0.

    Le problème vien du fait que, lors de la sauvegarde, word ne sauvegarde pas l'etat modifié des champs se trouvant dans les entetes et pied de pages.
    (j'ai fais les modifs à la main et c'est pareil)

    Comment puis-je faire pour que word sauvegarde les nouvelles valeurs dans ces champs ?

    j'utilise cette methode pour sauvegarder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    COleVariant m_True((short)TRUE);
    COleVariant m_False((short)FALSE)
    COleVariant m_Long((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    ...
    _Document m_WordDocument;
    ...
    m_WordDocument.SaveAs(
    COleVariant("C:\\result.doc"),
    m_Long,
    m_False, 
    COleVariant(""), 
    m_True,
    COleVariant(""),
    m_False,
    m_False,
    m_False,
    m_False,
    m_False);
    Dernière modification par doccpu ; 31/08/2006 à 10h39.

  2. #2
    doccpu
    Invité(e)
    Par défaut
    Vraiement perssone qui a eu ce problème ?

    Ce cerais sympa de me dire comment vous vous y prennez alor !

    merci d'avance...

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 112
    Par défaut
    Je suis désolé je ne peux pas t'aider mais en fait ce que tu fais m'intéresse.
    Je sais ça fait un peu cheveux sur la soupe.

    Alors pour ne pas bruiter ton sujet je t'ai envoyé un MP.

    Bon courage.

  4. #4
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    salut,

    je comprends pas trop ce que tu veux :s
    sois plus clair s'il te plait

  5. #5
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par doccpu
    J'utilise Word 2000, VC++6.0 et la version 9 de la lib office.

    j'ai un fichier word avec des champs inclus de type QUOTE
    exemple : Inserer-> champs -> QUOTE "[MOTCLE]"

    en fait j'ai ce type de champs un peu partout dans le document y compris dans les entetes et pieds de pages.

    J'arrive a ouvrir word, le doccument a remplacer le texte des champs en les retrouvant grace au texte de leur codage, a sauvegarder le doccument et a fermer le document a partir de VC++6.0.

    Le problème vien du fait que, lors de la sauvegarde, word ne sauvegarde pas l'etat modifié des champs se trouvant dans les entetes et pied de pages.
    (j'ai fais les modifs à la main et c'est pareil)
    ca me parais pourtant clair non ?

    J'ai des champs de type "QUOTE" dans mon doccument qui sont répartis un peu partout (y compris dans les entetes et pied de pages) ! j'arrive a modifier le texte de ces champs mais lors de la sauvegarde ou de la demande d'impression les champs dans les entetes et pied de page reprenne la valeurs qu'ils avaient avant d'etre modifié. Les champs modifiés dans le corps du texte gardent leur nouvelles valeurs.

    pour la modification je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    COleVariant m_True((short)TRUE), m_False((short)FALSE), m_Long((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    long l;
    long j;
    long k = ((Sections)m_WordDocument.GetSections()).GetCount();
    for (long i = 1; i <= k; i++)
    	{
    		l = ((HeadersFooters)((Section)((Sections)m_WordDocument.GetSections()).Item(i)).GetHeaders()).GetCount();
     
    		for(j = 1; j <= l; j++)
    		{
    			MAJChamps(((Fields)((Range)((HeaderFooter)((HeadersFooters)((Section)((Sections)m_WordDocument.GetSections()).Item(i)).GetHeaders()).Item(i)).GetRange()).GetFields()));
    		}	
    		l = 0;
    		l = ((HeadersFooters)((Section)((Sections)m_WordDocument.GetSections()).Item(i)).GetFooters()).GetCount();
    		for(j = 1; j <= l; j++)
    		{
    			MAJChamps(((Fields)((Range)((HeaderFooter)((HeadersFooters)((Section)((Sections)m_WordDocument.GetSections()).Item(i)).GetFooters()).Item(i)).GetRange()).GetFields()));
    		}
    	}
    	l = 0;
    	l = ((Fields)m_WordDocument.GetFields()).GetCount();
    	for(j = 1; j <= l; j++)
    	{
    		MAJChamps((Fields)m_WordDocument.GetFields());
    	}
    	m_WordDocument.SaveAs(COleVariant("C:\\Documents and Settings\\ppi\\Bureau\\Automation\\result.doc"),m_Long,m_False, COleVariant(""), m_True,COleVariant(""), m_False,m_False,m_False,m_False,m_False);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    void MAJChamps(Fields fs)
    {
    	Field f;
    	CString cs = "toto";
    	COleVariant m_True((short)TRUE), m_False((short)FALSE), m_Long((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    	for(long i = 1; i <= fs.GetCount(); i++)
    	{
    		f = ((Field)fs.Item(i));
    		if(f.GetType() == 35L) // 35L N° type champ QUOTE
    		{
    			if ( ((Range)f.GetCode()).GetText().Find("[MOTCLE]",0) != -1) 
    			{
    				((Range)((Field)f).GetResult()).SetText( cs );
    			}
    		}
    	}
    }

  6. #6
    doccpu
    Invité(e)
    Par défaut Résolu
    J'ai trouvé d'ou vennais le problème : en fait word fait un .Update sur les champs des entete et pied de pages par contre il ne touche pas aux champs du corp du texte lors de l'impression ou de la sauvegarde.

    J'ai trouvé une parade il sufit de faire un .Locked(False) sur les champs que l'on veu changer, changer les champs, et faire un .Locked(True) pour empecher word de metre a jours les chmaps.

    Ce qui permet d'enregistrer ou d'imprimer les modifications.
    Dernière modification par bigboomshakala ; 02/09/2006 à 11h41.

Discussions similaires

  1. Réponses: 10
    Dernier message: 14/01/2015, 00h41
  2. Réponses: 1
    Dernier message: 23/08/2010, 20h51
  3. [MFC] Automation MS Word / Correction orthographique
    Par bigboomshakala dans le forum MFC
    Réponses: 8
    Dernier message: 07/04/2006, 14h48
  4. [MFC] - Automation Word bug
    Par Alice9 dans le forum MFC
    Réponses: 3
    Dernier message: 25/05/2005, 16h47
  5. [AUTOMATION WORD]Pilotage Word par Delphi
    Par Sunny dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 05/12/2002, 17h09

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