Question

Tout le monde sait comment modifier le texte d'un objet Word.Range tout en conservant son format? Par exemple, si je dispose de ce texte " et je le change en "que txt ", txt sera toujours en gras.

Je cherche un moyen de modifier le texte entier de la plage, et pas seulement un mot, car je reçois le nouveau texte à partir d'une API indépendante. Je peux donc supposer que le nouveau texte et l'ancien texte ont le même nombre de mots.

Voici ce que j'ai obtenu jusqu'à présent:

    for (int i = 0; i < oldWords.Length; i++)
    {
        if (oldWords[i] == newWords[i])
            continue;

        object Replace = WdReplace.wdReplaceOne;
        object FindText = oldWords[i];
        object ReplaceWith = newWords[i];
        var success = Sentence.Find.Execute(parameters stub);
    }            

Mais pour une raison quelconque, il ne réussit que lors de la première exécution, car la sélection de la plage reste sur le mot trouvé.

Éditer: je l'ai eu, après chaque exécution, j'avais restauré la position de fin d'origine de ma gamme.

Merci.

Était-ce utile?

La solution

Vous ne pouvez pas utiliser la méthode Execute pour modifier le texte avec le formatage. Vous pouvez le faire comme:

Range rng=doc.Content;
rng.Find.Execute(ref finding, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing)

//if this method returns true, you will get the range at the finding location.
if(rng.Find.Found)
{
  rng.Text='sth';
  rng.Bold=0;
}

Peut-être que cela peut vous aider.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top