如何在不丢失格式的情况下更改 Word.Range 文本

Posted

技术标签:

【中文标题】如何在不丢失格式的情况下更改 Word.Range 文本【英文标题】:How to change Word.Range text without losing format 【发布时间】:2008-10-26 16:28:48 【问题描述】:

任何人都知道如何更改 Word.Range 对象的文本但仍保持其格式? 例如,如果我有“this text”并将其更改为“that txt”,txt 仍将是粗体。

我正在寻找一种方法来更改范围的整个文本,而不仅仅是一个单词,因为我从一个独立的 API 获取新文本,我可以假设新文本和旧文本具有字数相同。

这是我目前得到的:

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

但由于某种原因,它只在第一次执行时成功,因为范围选择仍然在找到的单词上。

编辑:知道了,每次执行后,我都恢复了 Range 的原始结束位置。

谢谢。

【问题讨论】:

【参考方案1】:

您不能使用Execute 方法更改带有格式的文本。 你可以这样做:

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;

也许这对你有帮助。

【讨论】:

以上是关于如何在不丢失格式的情况下更改 Word.Range 文本的主要内容,如果未能解决你的问题,请参考以下文章

如何在不丢失或复制任何记录的情况下移动或更改管道

如何在不丢失数据的情况下更改 Core Data SQLite 数据库的结构

如何使用 git reset 在不丢失本地更改的情况下重置未推送的提交

如何在不丢失 awk 格式的情况下替换整个列

如何在不丢失 Flex 格式的情况下替换富文本编辑器文本

如何在不丢失科学记数法的情况下将列转换为单个管道分隔的列?