C#Word Doc如何在更新文档之前进行多项更改

时间:2017-11-10 01:24:14

标签: c# outlook ms-word vsto

我希望这很容易,但我似乎无法找到它。我正在使用Outlook VSTO项目中的word文档对象来修改隐藏键值之间的值。

IE [key_start] text [key_end]

当他们在插件的下拉列表中进行选择时,我会更改电子邮件正文中的文字。

使这项工作

1)我取消隐藏所有钥匙

       Word.Document doc = Inspector.WordEditor as Word.Document;
       doc.Content.Font.Hidden = 0;

2)然后找到我的密钥并在它们之间生成一个范围

        int start_pos = -1;
        int end_pos = -1;

        //SelectTextRange is a custom function to find range based on text
        ValueRange = Custom.WordDocument.SelectTextRange(doc, key_value_start);
        if (ValueRange != null) {
            start_pos = ValueRange.End;
        }

        ValueRange = Custom.WordDocument.SelectTextRange(doc, key_value_end);
        if (ValueRange != null) {
            end_pos = ValueRange.Start;
        }

3)然后更新文本。

        if (start_pos > -1 && end_pos > -1) {
            ValueRange = doc.Range(start_pos, end_pos);
            ValueRange.Text = " new text goes here ";
        }

4)然后再次隐藏我的钥匙。

一切都很有效,但当更新中的更改通过文档级联时,它看起来有点俗气。看起来文档更新了每个命令,并且不会等到我的所有命令都完成。有没有办法阻止文档提交更改,以便我可以一次性完成所有操作,并且在此过程发生时用户不会看到隐藏文本的闪烁?

1 个答案:

答案 0 :(得分:1)

YowE3K钉了它。再次感谢你。

将此添加到我的更改开头

 doc.Application.ScreenUpdating = False

然后将其添加到最后

 doc.Application.ScreenUpdating = True

完全符合我的需要。我的所有更改都在没有文档更新的情况下发生,然后在设置doc.Application.ScreenUpdating = True后,它会使用我的所有更改来绘制更新的文档。