为了账号安全,请及时绑定邮箱和手机立即绑定

在字头表中添加页码 C#

在字头表中添加页码 C#

C#
qq_花开花谢_0 2023-07-22 16:09:16
我在 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: ");我什至无法在单元格中显示文本“页码:”。现在它所拥有的只是一个数字。
查看完整描述

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;

}


查看完整回答
反对 回复 2023-07-22
  • 1 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信