编辑Word文档范围文本可删除段落格式

时间:2012-10-10 21:19:18

标签: c# ms-word vsto add-in office-interop

我正在使用Office Interop与MS Word(Microsoft.Office.Interop.Word)和Microsoft.Office.Tools.Word来修改Word加载项中的Word文档。我有一个范围,其中包含我要编辑的特定文本。

当我更新Text对象时,Range的段落格式被重置,特别是Alignment和LeftIndent。我可以将Alignment和LeftIndent保存在临时变量中并重置它们,但这并不理想。 有没有办法阻止ParagraphFormat被重置,如果没有,是否有任何其他属性,我可能会忘记我需要保存(我只是实现了段落之前和之后的间距也会被重置......)。

Microsoft.Office.Interop.Word.Range range = myObject.range;
var oldAlignment = range.ParagraphFormat.Alignment;
var oldLeftIndent = range.ParagraphFormat.LeftIndent;

range.Text = "new text";
range.ParagraphFormat.Alignment = oldAlignment;
range.ParagraphFormat.LeftIndent = oldLeftIndent;

编辑:我只是尝试将ParagraphFormat保存为临时变量,然后使用它重置格式,但temp变量也会丢失其格式。

oldParagraphFormat = range.ParagraphFormat;
range.Text = "new text";
range.ParagraphFormat = oldParagraphFormat; // oldParagraphFormat's objects are reset

1 个答案:

答案 0 :(得分:4)

尝试在更改文本之前创建Range.ParagraphFormat对象的副本。您可以通过ParagraphFormat.Duplicate对象执行此操作。

Microsoft.Office.Interop.Word.Range range = myObject.range;
var oldParagraphFormat = myObject.range.ParagraphFormat.Duplicate;

range.Text = "new text";
range.ParagraphFormat = oldParagraphFormat;

关于发生了什么的一些背景:更改Range.Text实际上会重置Range对象,因为Range是文本+格式。因此,在不包含任何格式信息的情况下更改文本将导致以前的所有格式都丢失。 (就像更改HTML标记的innerText属性会导致该标记丢失所有子标记一样。)

如果重复ParagraphFormat没有帮助,那么您可能需要考虑设置Range.FormattedText属性而不是Range.Text。