2

MS Word (Microsoft.Office.Interop.Word) および Microsoft.Office.Tools.Word で Office Interop を使用して、Word アドインで Word ドキュメントを変更しています。編集したい特定のテキストを含む Range があります。

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 を一時変数として保存してから、それを使用して書式設定をリセットしようとしましたが、一時変数の書式設定も失われます。

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

1 に答える 1

5

Range.ParagraphFormatテキストを変更する前に、オブジェクトの複製を作成してみてください。ParagraphFormat.Duplicateオブジェクトを介してこれを行うことができます。これにより、古い ParagraphFormat 値が保持されます。範囲のテキストを変更してその ParagraphFormat をリセットした後、複製から値を復元できます。

// Get current value of ParagraphFormat.
Microsoft.Office.Interop.Word.Range range = myObject.range;
var oldParagraphFormat = myObject.range.ParagraphFormat.Duplicate;

// Change the range's text. This will reset ParagraphFormat, so reapply the previous value.
range.Text = "new text";
range.ParagraphFormat = oldParagraphFormat;

何が起こっているかについての背景: Range はテキスト + 書式設定であるため、変更するRange.Textと基本的に Range オブジェクトがリセットされます。そのため、書式設定情報を含めずにテキストを変更すると、以前の書式設定がすべて失われます。(HTML タグの innerText プロパティを変更すると、そのタグがすべての子タグを失うのと同じように。)

ParagraphFormat を複製しても解決しない場合は、 Range.Text の代わりにRange.FormattedTextプロパティを設定することを検討してください。

于 2012-10-11T13:45:22.497 に答える