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代码并编译它。这对我来说已经足够好了。如果你能解决这个问题,我很乐意看看答案。我建议你在赏金上牺牲一些名誉。把它调高,但一定要说明你需要什么。