2012-10-10 64 views
2

我使用Office互操作与MS Word(的Microsoft.Office.Interop.Word)和Microsoft.Office.Tools.Word修改Word文档中的Word加载项。我有一个范围,其中包含我想要编辑的特定文本。编辑Word文档范围的文本中删除段落格式

当我更新文本对象,该范围的段落格式被复位,具体地对齐和leftindent上。我可以将对齐和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作为一个临时变量,然后重新与该格式,但临时变量失去其格式为好。

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

其临时变量失去其格式..? oldAlignment或者oldAlignment和oldLeftIndent ..? – MethodMan

+0

都不是。编辑意味着我试图做var oldParagraphFormat = range.ParagraphFormat,这没有奏效。我会重新编辑我的问题来说明问题。 –

+0

看来,你只是重新分配,你可能要探讨如何将新ParagraphFormat.Alignment作为添加了一丝值oldAlignment和oldLeftIndent .. – MethodMan

回答

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对象。因此,在不包含任何格式信息的情况下更改文本会导致所有以前的格式丢失。 (就像更改HTML标记的innerText属性如何导致标记丢失所有子标记一样)。

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

+0

这正是我所期待的。我不能相信我错过了重复。感谢Keith的解释。 –

相关问题