如何将内容放入docx的mergefield中 [英] how can I put a content in a mergefield in docx

查看:119
本文介绍了如何将内容放入docx的mergefield中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用asp.net开发一个Web应用程序,并且有一个名为Template.docx的文件,该文件的工作方式类似于生成其他报告的模板.在此Template.docx内部,我有一些MergeFields(标题,CustomerName,Content,Footer等)可替换C#中的某些动态内容.

I'm developing a web application with asp.net and I have a file called Template.docx that works like a template to generate other reports. Inside this Template.docx I have some MergeFields (Title, CustomerName, Content, Footer, etc) to replace for some dynamic content in C#.

我想知道如何在docx的mergefield中放置内容?

I would like to know, how can I put a content in a mergefield in docx ?

我不知道MergeFields是执行此操作的正确方法还是其他方法.如果您可以建议我,我将不胜感激!

I don't know if MergeFields is the right way to do this or if there is another way. If you can suggest me, I appreciate!

PS:我的Web应用程序中引用了openxml.

PS: I have openxml referenced in my web application.

private MemoryStream LoadFileIntoStream(string fileName)
{
    MemoryStream memoryStream = new MemoryStream();
    using (FileStream fileStream = File.OpenRead(fileName))
    {
        memoryStream.SetLength(fileStream.Length);
        fileStream.Read(memoryStream.GetBuffer(), 0, (int) fileStream.Length);

        memoryStream.Flush();
        fileStream.Close();
    }
    return memoryStream;
}

public MemoryStream GenerateWord()
{
    string templateDoc = "C:\\temp\\template.docx"; 
    string reportFileName = "C:\\temp\\result.docx";

    var reportStream = LoadFileIntoStream(templateDoc);

    // Copy a new file name from template file
    //File.Copy(templateDoc, reportFileName, true);

    // Open the new Package
    Package pkg = Package.Open(reportStream, FileMode.Open, FileAccess.ReadWrite);

    // Specify the URI of the part to be read
    Uri uri = new Uri("/word/document.xml", UriKind.Relative);
    PackagePart part = pkg.GetPart(uri);

    XmlDocument xmlMainXMLDoc = new XmlDocument();
    xmlMainXMLDoc.Load(part.GetStream(FileMode.Open, FileAccess.Read));

    // replace some keys inside xml (it will come from database, it's just a test)
    xmlMainXMLDoc.InnerXml = xmlMainXMLDoc.InnerXml.Replace("field_customer", "My Customer Name");
    xmlMainXMLDoc.InnerXml = xmlMainXMLDoc.InnerXml.Replace("field_title", "Report of Documents");
    xmlMainXMLDoc.InnerXml = xmlMainXMLDoc.InnerXml.Replace("field_content", "Content of Document");

    // Open the stream to write document
    StreamWriter partWrt = new StreamWriter(part.GetStream(FileMode.Open, FileAccess.Write));
    //doc.Save(partWrt);
    xmlMainXMLDoc.Save(partWrt);

    partWrt.Flush();
    partWrt.Close();
    reportStream.Flush();
    pkg.Close();

    return reportStream;
}

PS:将MemoryStream转换为文件时,出现了损坏的文件.谢谢!

PS: When I convert MemoryStream to a file, I got a corrupted file. Thanks!

推荐答案

您可以尝试 http ://www.codeproject.com/KB/office/Fill_Mergefields.aspx ,该文件使用Open XML SDK进行.

You could try http://www.codeproject.com/KB/office/Fill_Mergefields.aspx which uses the Open XML SDK to do this.

这篇关于如何将内容放入docx的mergefield中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆