C# Word Doc 如何在更新文档之前进行多项更改
C# Word Doc How To Make Multiple Changes Before Updating Document
我希望这很容易,但我似乎找不到它。我正在 Outlook VSTO 项目中使用 word 文档对象来修改位于隐藏键值之间的值。
IE [key_start] 文本 [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) 然后再把我的钥匙藏起来
一切都很好,但是当更改在文档更新时级联时看起来有点俗气。看起来文档会根据每个命令进行更新,并且不会等到我的所有命令都完成。有没有一种方法可以防止文档提交更改,这样我就可以一次性完成所有这些操作,而不会让用户在这个过程发生时看到隐藏文本的闪烁?
YowE3K 做到了。再次感谢。
将此添加到我更改的开头
doc.Application.ScreenUpdating = False
然后把这个加到最后
doc.Application.ScreenUpdating = True
正是我所需要的。我的所有更改都在没有更新文档的情况下发生,然后一旦我设置 doc.Application.ScreenUpdating = True
它会绘制包含我所有更改的更新文档。
我希望这很容易,但我似乎找不到它。我正在 Outlook VSTO 项目中使用 word 文档对象来修改位于隐藏键值之间的值。
IE [key_start] 文本 [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) 然后再把我的钥匙藏起来
一切都很好,但是当更改在文档更新时级联时看起来有点俗气。看起来文档会根据每个命令进行更新,并且不会等到我的所有命令都完成。有没有一种方法可以防止文档提交更改,这样我就可以一次性完成所有这些操作,而不会让用户在这个过程发生时看到隐藏文本的闪烁?
YowE3K 做到了。再次感谢。
将此添加到我更改的开头
doc.Application.ScreenUpdating = False
然后把这个加到最后
doc.Application.ScreenUpdating = True
正是我所需要的。我的所有更改都在没有更新文档的情况下发生,然后一旦我设置 doc.Application.ScreenUpdating = True
它会绘制包含我所有更改的更新文档。