方法: 範囲を作成するときにプログラムによって段落記号を除外する
段落に基づいて Range オブジェクトを作成すると、段落記号などのすべての非印刷文字も範囲に含まれます。元の段落から出力先の段落にテキストを挿入する必要があるとします。出力先の段落を複数の段落に分割しない場合は、最初に元の段落から段落記号を削除する必要があります。また、段落の書式情報は段落記号に保存されるので、場合によっては範囲を既存の段落に挿入するときにこの情報を削除する必要もあります。
対象: このトピックの情報は、Word 2013 と Word 2010 のドキュメント レベルのプロジェクトおよびアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
次の使用例は、2 つの文字列変数を宣言し、アクティブ文書の最初の段落と 2 番目の段落の内容を取得し、次にそれらの内容を交換します。その後、MoveEnd メソッドを使用して、範囲から段落記号を削除し、段落の中にテキストを挿入します。
テキスト挿入時に段落構造を制御するには
最初の段落および 2 番目の段落に 2 つの範囲変数を作成し、Text プロパティを使用してその内容を取得します。
次のコード例はドキュメント レベルのカスタマイズで使用できます。
Dim firstRange As Word.Range = Me.Paragraphs(1).Range Dim secondRange As Word.Range = Me.Paragraphs(2).Range Dim firstString As String = firstRange.Text Dim secondString As String = secondRange.Text
Word.Range firstRange = this.Paragraphs[1].Range; Word.Range secondRange = this.Paragraphs[2].Range; string firstString = firstRange.Text; string secondString = secondRange.Text;
次のコード例はアプリケーション レベルのアドインで使用できます。このコードではアクティブ ドキュメントを使用します。
Dim document As Word.Document = Me.Application.ActiveDocument Dim firstRange As Word.Range = document.Paragraphs(1).Range Dim secondRange As Word.Range = document.Paragraphs(2).Range Dim firstString As String = firstRange.Text Dim secondString As String = secondRange.Text
Word.Document document = this.Application.ActiveDocument; Word.Range firstRange = document.Paragraphs[1].Range; Word.Range secondRange = document.Paragraphs[2].Range; string firstString = firstRange.Text; string secondString = secondRange.Text;
Text プロパティを割り当て、2 つの段落のテキストを入れ替えます。
firstRange.Text = secondString secondRange.Text = firstString
firstRange.Text = secondString; secondRange.Text = firstString;
各範囲を順に選択し、一時停止して結果をメッセージ ボックスに表示します。
firstRange.Select() MessageBox.Show(firstRange.Text) secondRange.Select() MessageBox.Show(secondRange.Text)
firstRange.Select(); MessageBox.Show(firstRange.Text); secondRange.Select(); MessageBox.Show(secondRange.Text);
MoveEnd メソッドを使用して firstRange を調整して、firstRange に段落記号が含まれないようにします。
firstRange.MoveEnd(Unit:=Word.WdUnits.wdCharacter, Count:=-1)
object charUnit = Word.WdUnits.wdCharacter; object move = -1; // move left 1 firstRange.MoveEnd(ref charUnit, ref move);
最初の段落の残りのテキストを置換して、範囲の Text プロパティに新しい文字列を割り当てます。
firstRange.Text = "New content for paragraph 1."
firstRange.Text = "New content for paragraph 1.";
段落記号を含む secondRange のテキストを置換します。
secondRange.Text = "New content for paragraph 2."
secondRange.Text = "New content for paragraph 2.";
firstRange を選択し、一時停止して結果をメッセージ ボックスに表示した後、secondRange を使用して同じ処理を行います。
firstRange は、再定義されて段落記号が除外されているため、段落の元の書式が維持されています。ただし、文は段落記号を上書きして secondRange に挿入され、独立していた段落が削除されます。
firstRange.Select() MessageBox.Show(firstRange.Text) secondRange.Select() MessageBox.Show(secondRange.Text)
firstRange.Select(); MessageBox.Show(firstRange.Text); secondRange.Select(); MessageBox.Show(secondRange.Text);
両範囲の元の内容は文字列として保存されているため、文書を元の状態に戻すことができます。
MoveEnd メソッドを使用して firstRange を 1 文字分再調整して、段落記号が含まれるようにします。
firstRange.MoveEnd(Unit:=Word.WdUnits.wdCharacter, Count:=1)
move = 1; // move right 1 firstRange.MoveEnd(ref charUnit, ref move);
secondRange を削除します。その結果、段落 3 が元の位置に戻ります。
secondRange.Delete()
secondRange.Delete(ref missing, ref missing);
firstRange に元の段落テキストを復元します。
firstRange.Text = firstString
firstRange.Text = firstString;
Range オブジェクトの InsertAfter メソッドを使用して、元の段落の 2 つの内容を firstRange の後ろに挿入し、次に firstRange を選択します。
firstRange.InsertAfter(secondString) firstRange.Select()
firstRange.InsertAfter(secondString); firstRange.Select();
ドキュメント レベルのカスタマイズの例
ドキュメント レベルのカスタマイズにテキストを挿入するときに段落構造を制御するには
次の例は、ドキュメント レベルのカスタマイズの完全なメソッドを示しています。このコードを使用するには、プロジェクトの ThisDocument クラスから実行します。
Private Sub ReplaceParagraphText() Dim firstRange As Word.Range = Me.Paragraphs(1).Range Dim secondRange As Word.Range = Me.Paragraphs(2).Range Dim firstString As String = firstRange.Text Dim secondString As String = secondRange.Text firstRange.Text = secondString secondRange.Text = firstString firstRange.Select() MessageBox.Show(firstRange.Text) secondRange.Select() MessageBox.Show(secondRange.Text) firstRange.MoveEnd(Unit:=Word.WdUnits.wdCharacter, Count:=-1) firstRange.Text = "New content for paragraph 1." secondRange.Text = "New content for paragraph 2." firstRange.Select() MessageBox.Show(firstRange.Text) secondRange.Select() MessageBox.Show(secondRange.Text) firstRange.MoveEnd(Unit:=Word.WdUnits.wdCharacter, Count:=1) secondRange.Delete() firstRange.Text = firstString firstRange.InsertAfter(secondString) firstRange.Select() End Sub
private void ReplaceParagraphText() { Word.Range firstRange = this.Paragraphs[1].Range; Word.Range secondRange = this.Paragraphs[2].Range; string firstString = firstRange.Text; string secondString = secondRange.Text; firstRange.Text = secondString; secondRange.Text = firstString; firstRange.Select(); MessageBox.Show(firstRange.Text); secondRange.Select(); MessageBox.Show(secondRange.Text); object charUnit = Word.WdUnits.wdCharacter; object move = -1; // move left 1 firstRange.MoveEnd(ref charUnit, ref move); firstRange.Text = "New content for paragraph 1."; secondRange.Text = "New content for paragraph 2."; firstRange.Select(); MessageBox.Show(firstRange.Text); secondRange.Select(); MessageBox.Show(secondRange.Text); move = 1; // move right 1 firstRange.MoveEnd(ref charUnit, ref move); secondRange.Delete(ref missing, ref missing); firstRange.Text = firstString; firstRange.InsertAfter(secondString); firstRange.Select(); }
アプリケーション レベルのアドインの例
アプリケーション レベルのアドインにテキストを挿入するときに段落構造を制御するには
次の例は、アプリケーション レベルのアドインの完全なメソッドを示しています。このコードを使用するには、プロジェクトの ThisAddIn クラスから実行します。
Private Sub ReplaceParagraphText() Dim document As Word.Document = Me.Application.ActiveDocument Dim firstRange As Word.Range = document.Paragraphs(1).Range Dim secondRange As Word.Range = document.Paragraphs(2).Range Dim firstString As String = firstRange.Text Dim secondString As String = secondRange.Text firstRange.Text = secondString secondRange.Text = firstString firstRange.Select() MessageBox.Show(firstRange.Text) secondRange.Select() MessageBox.Show(secondRange.Text) firstRange.MoveEnd(Unit:=Word.WdUnits.wdCharacter, Count:=-1) firstRange.Text = "New content for paragraph 1." secondRange.Text = "New content for paragraph 2." firstRange.Select() MessageBox.Show(firstRange.Text) secondRange.Select() MessageBox.Show(secondRange.Text) firstRange.MoveEnd(Unit:=Word.WdUnits.wdCharacter, Count:=1) secondRange.Delete() firstRange.Text = firstString firstRange.InsertAfter(secondString) firstRange.Select() End Sub
private void ReplaceParagraphText() { Word.Document document = this.Application.ActiveDocument; Word.Range firstRange = document.Paragraphs[1].Range; Word.Range secondRange = document.Paragraphs[2].Range; string firstString = firstRange.Text; string secondString = secondRange.Text; firstRange.Text = secondString; secondRange.Text = firstString; firstRange.Select(); MessageBox.Show(firstRange.Text); secondRange.Select(); MessageBox.Show(secondRange.Text); object charUnit = Word.WdUnits.wdCharacter; object move = -1; // move left 1 firstRange.MoveEnd(ref charUnit, ref move); firstRange.Text = "New content for paragraph 1."; secondRange.Text = "New content for paragraph 2."; firstRange.Select(); MessageBox.Show(firstRange.Text); secondRange.Select(); MessageBox.Show(secondRange.Text); move = 1; // move right 1 firstRange.MoveEnd(ref charUnit, ref move); secondRange.Delete(ref missing, ref missing); firstRange.Text = firstString; firstRange.InsertAfter(secondString); firstRange.Select(); }
参照
処理手順
方法: プログラムによって文書内の範囲または選択範囲を縮小する
方法: プログラムによって Word 文書にテキストを挿入する
方法: プログラムによって Word 文書の範囲をリセットする
方法: プログラムによって文書に複数の範囲を定義して選択する