2012-10-10 60 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的解釋。 –

相關問題