Pregunta

Alguien sabe cómo puedo cambiar el texto de un objeto Word.Range pero aún así mantener su formato. Por ejemplo, si tengo " este texto " y lo cambio a " que txt " ;, txt todavía estará en negrita.

Estoy buscando una manera de cambiar todo el texto del rango, no solo una palabra, ya que obtengo el nuevo texto de una API independiente, puedo asumir que el nuevo texto y el texto antiguo tienen el mismo número de palabras.

Esto es lo que obtuve hasta ahora:

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

Pero por alguna razón, solo tiene éxito en la primera ejecución, porque la selección de rango permanece en la palabra encontrada.

Editar: lo conseguí, después de cada ejecución, restauré la posición final original de mi Rango.

Gracias.

¿Fue útil?

Solución

No puede usar el método Execute para cambiar el texto con formato. Puedes hacerlo como:

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

Tal vez esto pueda ayudarte.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top