C# 如何添加一个“;第x页,共y页“;当我使用C生成Word2007文档时,将其添加到Word2007文档的页脚#

C# 如何添加一个“;第x页,共y页“;当我使用C生成Word2007文档时,将其添加到Word2007文档的页脚#,c#,.net-4.0,ms-word,office-interop,page-numbering,C#,.net 4.0,Ms Word,Office Interop,Page Numbering,我看了又看 我试过这个: private void AddFooters() { foreach (Word.Section wordSection in this.WordDoc.Sections) { object fieldEmpty = Word.WdFieldType.wdFieldEmpty; object autoText = "AUTOTEXT \"Page X of Y\" ";

我看了又看

我试过这个:

    private void AddFooters()
    {
        foreach (Word.Section wordSection in this.WordDoc.Sections)
        {
            object fieldEmpty = Word.WdFieldType.wdFieldEmpty;
            object autoText = "AUTOTEXT  \"Page X of Y\" ";
            object preserveFormatting = true;

            wordSection.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Fields.Add(
                wordSection.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range,
                ref fieldEmpty, ref autoText, ref preserveFormatting);
        }
    }
这是:

    private void AddFooters()
    {
        foreach (Word.Section section in this.WordDoc.Sections)
        {
            Word.Range footerRange = section.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
            this.WordDoc.ActiveWindow.Selection.TypeText("Page ");
            footerRange.Fields.Add(footerRange, Word.WdFieldType.wdFieldPage);
            this.WordDoc.ActiveWindow.Selection.TypeText(" of ");
            footerRange = section.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
            footerRange.Fields.Add(footerRange, Word.WdFieldType.wdFieldNumPages);
            footerRange.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;
        }
    }
我录制了这个VBA宏,但它似乎没有帮助

Sub Macro1()
'
' Macro1 Macro
'
'
    WordBasic.ViewFooterOnly
    ActiveDocument.AttachedTemplate.BuildingBlockEntries("Bold Numbers 3"). _
        Insert Where:=Selection.Range, RichText:=True
End Sub
我试过的东西都不完全适合我(我有点接近)。
如果问题不清楚,请告诉我。

这是用VB编写的,但我尝试了这个方法,它对我很有效,尽管这里您必须提供当前页码和总页码。我相信有更好的解决方案:/

WordBasic.viewfooteronly
Selection.EndKey Unit:=wdStory
Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Selection.TypeText Text:="Page " & current & " of " & total
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
是的,它起作用了

// objects I use in the code below
// instanciate wordapp as the Word application object
Microsoft.Office.Interop.Word.Application wordapp = new Microsoft.Office.Interop.Word.Application();


// create missing object for compatibility with C# .NET 3.5
Object oMissing = System.Reflection.Missing.Value;

// define worddoc as the word document object
Microsoft.Office.Interop.Word.Document worddoc = wordapp.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);

// define s as the selection object
Microsoft.Office.Interop.Word.Selection s = wordapp.Selection;

// code for the page numbers
// move selection to page footer (Use wdSeekCurrentPageHeader for header)
worddoc.ActiveWindow.ActivePane.View.SeekView = Microsoft.Office.Interop.Word.WdSeekView.wdSeekCurrentPageFooter;

// Align right
s.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight;

// start typing
worddoc.ActiveWindow.Selection.TypeText("Page ");

// create the field  for current page number
object CurrentPage = Microsoft.Office.Interop.Word.WdFieldType.wdFieldPage;

// insert that field into the selection
worddoc.ActiveWindow.Selection.Fields.Add(s.Range, ref CurrentPage, ref oMissing, ref oMissing);

// write the "of"
worddoc.ActiveWindow.Selection.TypeText(" of ");

// create the field for total page number.
object TotalPages = Microsoft.Office.Interop.Word.WdFieldType.wdFieldNumPages;

// insert total pages field in the selection.
worddoc.ActiveWindow.Selection.Fields.Add(s.Range, ref TotalPages, ref oMissing, ref oMissing);

// return to the document main body.
worddoc.ActiveWindow.ActivePane.View.SeekView = Microsoft.Office.Interop.Word.WdSeekView.wdSeekMainDocument;
最后一行返回到主文档


这不是最好、最“花哨”的c#,但对我来说很管用。C#.Net 3.5,Office 2007。

此链接有助于解决此问题

以下是我在VB.NET中解决此问题的方法:

Dim aDoc As Word.Document 
    aDoc.ActiveWindow.ActivePane.View.SeekView = Microsoft.Office.Interop.Word.WdSeekView.wdSeekCurrentPageFooter
    aDoc.ActiveWindow.ActivePane.Selection.Paragraphs.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight 
    aDoc.ActiveWindow.Selection.TypeText("Page ")

Dim CurrentPage = Word.WdFieldType.wdFieldPage 
    aDoc.ActiveWindow.Selection.Fields.Add(aDoc.ActiveWindow.Selection.Range, CurrentPage, , ) 
    aDoc.ActiveWindow.Selection.TypeText(" of ")  

Dim TotalPageCount = Word.WdFieldType.wdFieldNumPages
    aDoc.ActiveWindow.Selection.Fields.Add(aDoc.ActiveWindow.Selection.Range, TotalPageCount, , )
    aDoc.ActiveWindow.ActivePane.View.SeekView = Microsoft.Office.Interop.Word.WdSeekView.wdSeekMainDocument

此外,您还可以尝试在页脚所在的位置添加书签,然后设置书签范围。text propertyId是否可以使用?“我希望做同样的事情。@克里斯托弗·马汉,对不起,我在某个时候停止了尝试,决定发出LaTeX代码并编译它。这对我来说已经足够好了。如果你能解决这个问题,我很乐意看看答案。我建议你在赏金上牺牲一些名誉。把它调高,但一定要说明你需要什么。