none
How-to: Remove text from Word document footer using C# RRS feed

  • Question

  • I'm trying to remove a footer from a Word document using C# 4.  The footer looks like this:

    Page 1 April 18, 2012

    Actually, this the text for the footer when displayed in Word VBA:

    Page 1 ( April 18, 2012

    There's actually a bullet character between "Page 1" and "April".  In the end the footer should look like this:
    April 18, 2012

    Anyway, in Word VBA, I'm able to do it using this code:   
    Dim rngFtr As Range    
    Set rngFtr = ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range    
    rngFtr.Collapse wdCollapseStart    
    rngFtr.MoveStart wdParagraph, 1    
    rngFtr.MoveEnd wdWord, 4    
    rngFtr.Delete
       
    I tried the same thing in C# but it removes the footer entirely.  Here's my code in C# 4:
    using Microsoft.Office.Interop.Word;    
    Microsoft.Office.Interop.Word.Application ap = new Microsoft.Office.Interop.Word.Application();    
    Document doc = ap.Documents.Open(docFile.FullName, ReadOnly: false, Visible: false);    
    doc.Activate();    
    Microsoft.Office.Interop.Word.Range ftrRng =        doc.Sections[1].Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;    
    ftrRng.Collapse(WdCollapseDirection.wdCollapseEnd);    
    ftrRng.MoveStart(WdUnits.wdParagraph, 1);    
    ftrRng.MoveEnd(WdUnits.wdWord, 4);    
    ftrRng.Delete();        
    ap.Documents.Close(SaveChanges: false, OriginalFormat: false, RouteDocument: false);    
    ((_Application) ap).Quit(SaveChanges: false, OriginalFormat: false, RouteDocument: false);        
    System.Runtime.InteropServices.Marshal.ReleaseComObject(ap);
        
    I even tried other ways to get rid of "Page 1" & the bullet, such as:
        
       
    var replaceText = string.Empty;    
    object mis = System.Type.Missing;    
    var targetFooterText =        doc.Sections[1].Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Text.ToString().Substring(1, 10);    
    doc.Sections[1].Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Find.Execute(        
        targetFooterText,        
        ref mis, ref mis, ref mis, ref mis, ref mis, ref mis, 
        ref mis, ref mis,        
        replaceText,        
        ref mis, ref mis, ref mis, ref mis, ref mis);
    This doesn't do anything.

    Please let me know what I'm doing wrong.  Thank you in advance.

    I'm not sure if this is important, but the bullet is a Unicode-2022.
    Thursday, April 19, 2012 10:39 PM

Answers

  • Inquisitive_one,  please try the following code snippet:

            private void ThisDocument_Startup(object sender, System.EventArgs e)
            {
                ActiveWindow.ActivePane.View.SeekView = WdSeekView.wdSeekPrimaryFooter;
                Application.Selection.MoveRight(WdUnits.wdCharacter, 1);
                Application.Selection.Delete(WdUnits.wdCharacter, 9);
            }

    Thank you very much.

    Best Regards,


    Bruce Song [MSFT]
    MSDN Community Support | Feedback to us

    Tuesday, April 24, 2012 3:05 AM

All replies

  • Hi Inquisitive_one,

    Thank you for posting.

    You can directly assign the new footer text to the range of the footer. Please refer to the following code snippet:

            private void ThisDocument_Startup(object sender, System.EventArgs e)
            {
                var replaceText = string.Empty;
                object mis = System.Type.Missing;
                //var targetFooterText = this.Sections[1].Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Text.ToString().Substring(1, 10);
                this.Sections[1].Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Text = "New footer";
                //var v = this.Sections[1].Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Find.Execute(
                //    targetFooterText,
                //    ref mis, ref mis, ref mis, ref mis, ref mis, ref mis,
                //    ref mis, ref mis,
                //    replaceText,
                //    ref mis, ref mis, ref mis, ref mis, ref mis);
            }

    Hope this can help you and just feel free to follow up after you have tried.

    Best Regards,


    Bruce Song [MSFT]
    MSDN Community Support | Feedback to us

    Monday, April 23, 2012 6:04 AM
  • Sorry this didn't work.

    I should have specified something first.  I have a image on the right side of the footer.  I would like to retain that as is & just change the text.  Here's what the original footer looks like:  So, all I want is from "April 20, 2012" onwards.

    Monday, April 23, 2012 3:14 PM
  • Inquisitive_one,  please try the following code snippet:

            private void ThisDocument_Startup(object sender, System.EventArgs e)
            {
                ActiveWindow.ActivePane.View.SeekView = WdSeekView.wdSeekPrimaryFooter;
                Application.Selection.MoveRight(WdUnits.wdCharacter, 1);
                Application.Selection.Delete(WdUnits.wdCharacter, 9);
            }

    Thank you very much.

    Best Regards,


    Bruce Song [MSFT]
    MSDN Community Support | Feedback to us

    Tuesday, April 24, 2012 3:05 AM
  • Hi, You can either replace the text with empty. Or use  View.SeekView  to get your footer and use delete() to get rid of it. Good luck.
    • Edited by Green823 Tuesday, April 24, 2012 8:53 AM
    Tuesday, April 24, 2012 8:53 AM
  • Thanks @Bruce.  That did the trick.  A very simple and great code.  Thank you.
    Tuesday, April 24, 2012 2:52 PM