如何:创建范围时排除段落标记
无论何时在基于段落创建 Range 对象时,所有非打印字符(如段落标记)都被包括在范围之内。 您可能想将源段落的文本插入到目标段落中。 如果不想把目标段落拆分成若干单独的段落,就必须先移除源段落中的段落标记。 此外,由于段落标记中存有段落格式设置信息,因此在将范围插入到现有段落中时,可能也不想包括其原有格式设置。
**适用于:**本主题中的信息适用于 Word 2007 和 Word 2010 的文档级项目和应用程序级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能。
下面的示例过程声明两个字符串变量,检索活动文档中第一段与第二段的内容,然后交换它们的内容。 该示例然后演示如何使用 MoveEnd 方法从范围中移除段落标记并在段落中插入文本。
插入文本时控制段落结构
为第一段和第二段创建两个范围变量,并使用 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 属性,在两个段落之间交换文本。
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 的位置,使其移动一个字符,以包括段落标记。
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 方法在 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(); }