使用C#和asp.net更改word文档模板页脚和标题

时间:2013-07-02 05:45:38

标签: c# asp.net ms-office

我想使用退出的word文档模板创建word文档。 所以我试试这个

private void CreateWordDocument(object fileName,
                                object saveAs)
{
    object missing = System.Reflection.Missing.Value;           
    var wordApp = new Application();         
    Microsoft.Office.Interop.Word.Document aDoc = null;

    if (File.Exists((string)fileName))
    {
        DateTime today = DateTime.Now;

        object readOnly = false;
        object isVisible = false;

        //Set Word to be not visible.
        wordApp.Visible = false;

        //Open the word document
        aDoc = wordApp.Documents.Open(ref fileName, ref missing,
            ref readOnly, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref missing,
            ref missing, ref isVisible, ref missing, ref missing,
            ref missing, ref missing);

        aDoc.Activate();

        this.FindAndReplace(wordApp, "<Name>", txtName.Text);
        this.FindAndReplace(wordApp, "<company>", txtcompanyName.Text);
    }
    else
    {
        return;
    }

    //Save the document as the correct file name.
    aDoc.SaveAs(ref saveAs, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref missing);

    //Close the document - you have to do this.
    aDoc.Close(ref missing, ref missing, ref missing);
}

在我的模板页脚和标题部分有一些变量。 但我不知道如何使用变量替换它..

我的标题是这样的。 enter image description here

怎么做?

1 个答案:

答案 0 :(得分:0)

即使我有同样的要求编辑现有的单词模板,包括页眉和页脚。这是我使用的解决方案,并且工作得很好。

替换单词模板中的单词:

    string destFile = Server.MapPath("~/Letters/sample.docx");
    object fileName = destFile; 
    Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application { Visible = false };
    Microsoft.Office.Interop.Word.Document aDoc = wordApp.Documents.Open(fileName, ReadOnly: false, Visible: false);
    object Unknown = Type.Missing;
    aDoc.Activate();
    try
    {
     //Replace any text inside the word document
     FindAndReplace(wordApp, "[Date]", DateTime.Now.ToString("MMMM dd, yyyy"));
    }

要替换单词模板页脚中的单词:

    object replaceAll = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;
    foreach (Microsoft.Office.Interop.Word.Section section in aDoc.Sections)
                {
                    Microsoft.Office.Interop.Word.HeadersFooters footers = section.Footers;
                    foreach (Microsoft.Office.Interop.Word.HeaderFooter footer in footers)
                    {
                        Range footerRange = footer.Range;
                        footerRange.Find.ClearFormatting();
                        footerRange.Find.Replacement.ClearFormatting(); 
                        footerRange.Find.Text = "[Vendor Specialist Phone]";
                        footerRange.Find.Replacement.Text = ds.Tables[1].Rows[0]["phoneNumber"].ToString();
                        footerRange.Find.Wrap = WdFindWrap.wdFindContinue;
                        footerRange.Find.Execute(ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref replaceAll, ref Unknown, ref Unknown, ref Unknown, ref Unknown);
                    }
                }
            aDoc.SaveAs(ref fileName,
            ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown,
            ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown,
            ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown);

            }
            catch (Exception ex)
            {
            }
            finally
            {
                //Close the document
                aDoc.Close(WdSaveOptions.wdSaveChanges);
                //Close the instance of WINWORD.EXE
                ((_Application)wordApp).Quit(ref Unknown, ref Unknown, ref Unknown);
            }

替换标题,与页脚相同。只需使用section.Headers而不是section.Footers。休息一切都一样。

这没问题就行了。

谢谢