Domanda

Qualcuno sa come posso cambiare il testo di un oggetto Word.Range ma mantenendo comunque il suo formato? Ad esempio, se ho " questo testo " e lo cambio in " che txt " ;, txt sarà ancora in grassetto.

Sto cercando un modo per cambiare l'intero testo dell'intervallo, non solo una singola parola, poiché sto ricevendo il nuovo testo da un'API indipendente, posso presumere che il nuovo testo e il vecchio testo abbiano lo stesso numero di parole.

Questo è quello che ho ottenuto finora:

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

Ma per qualche motivo, riesce solo nel primo Esegui, perché la selezione dell'intervallo rimane sulla parola trovata.

Modifica: capito, dopo ogni esecuzione, ho ripristinato la posizione finale originale del mio intervallo.

Grazie.

È stato utile?

Soluzione

Non puoi utilizzare il metodo Execute per modificare il testo con la formattazione. Puoi farlo come:

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

Forse questo può aiutarti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top