在字头表中添加页码 C#

我在 word 中创建了一个 1x3 表格作为标题。这就是我想要的样子。

左文本 中文本 页码:

我希望 PageNumber 单元格看起来像这样 -

页码:X/Y

我已经成功地完成了单元格(1,1)和(1,2)。我发现这可以帮助我处理单元格 (1,3),但它没有按我喜欢的方式工作。我知道如何获取文档的总数。我不确定如何正确实施它。

Range rRange = restheaderTable.Cell(1, 3).Range;
rRange.End = rRange.End - 1;
oDoc.Fields.Add(rRange, Type: WdFieldType.wdFieldPage, Text: "Page Number: ");

我什至无法在单元格中显示文本“页码:”。现在它所拥有的只是一个数字。


qq_花开花谢_0
浏览 118回答 1
1回答

明月笑刀无情

您要查找的字段枚举是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;}
打开App,查看更多内容
随时随地看视频慕课网APP