1 回答
TA贡献1828条经验 获得超4个赞
您要查找的字段枚举是WordWdFieldType.wdFieldNumPages。
下一个障碍是如何构造字段+文本+字段,因为当按此顺序添加内容时,Word 的行为不“合乎逻辑”。目标点保留在插入的字段之前。因此,要么需要向后工作,要么在每一位内容之后移动目标范围。
这是我演示后一种方法的一些代码。插入文本和插入字段位于两个单独的过程中,这两个过程将目标Range和文本(无论是文字还是字段文本)作为参数。这样,可以逻辑地构建字段代码(第 x 页,共 n 页)。目标Range从两个过程返回,已经折叠到其端点,准备附加更多内容。
请注意,我更喜欢使用字段的文本(包括任何字段开关)来构造字段,而不是指定字段类型(枚举WdFieldType)。这提供了更大的灵活性。我还强烈建议将该PreserveFormatting参数设置为false,因为该true设置可能会在更新字段时导致非常奇怪的格式。它应该只在非常特定的实例中使用(通常涉及链接表)。
private void btnInsertPageNr_Click(object sender, EventArgs e)
{
getWordInstance();
Word.Document doc = null;
if (wdApp.Documents.Count > 0)
{
doc = wdApp.ActiveDocument;
Word.Range rngHeader = doc.Sections[1].Headers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
if (rngHeader.Tables.Count > 0)
{
Word.Table tbl = rngHeader.Tables[1];
Word.Range rngPageNr = tbl.Range.Cells[tbl.Range.Cells.Count].Range;
//Collapse the range so that it's within the cell and
//doesn't include the end-of-cell markers
object oCollapseStart = Word.WdCollapseDirection.wdCollapseStart;
rngPageNr.Collapse(ref oCollapseStart);
rngPageNr = InsertNewText(rngPageNr, "Page ");
rngPageNr = InsertAField(rngPageNr, "Page");
rngPageNr = InsertNewText(rngPageNr, " of ");
rngPageNr = InsertAField(rngPageNr, "NumPages");
}
}
}
private Word.Range InsertNewText(Word.Range rng, string newText)
{
object oCollapseEnd = Word.WdCollapseDirection.wdCollapseEnd;
rng.Text = newText;
rng.Collapse(ref oCollapseEnd);
return rng;
}
private Word.Range InsertAField(Word.Range rng,
string fieldText)
{
object oCollapseEnd = Word.WdCollapseDirection.wdCollapseEnd;
object unitCharacter = Word.WdUnits.wdCharacter;
object oOne = 1;
Word.Field fld = rng.Document.Fields.Add(rng, missing, fieldText, false);
Word.Range rngField = fld.Result;
rngField.Collapse(ref oCollapseEnd);
rngField.MoveStart(ref unitCharacter, ref oOne);
return rngField;
}
- 1 回答
- 0 关注
- 117 浏览
添加回答
举报