如何将内容放入docx的mergefield中 [英] how can I put a content in a mergefield in docx
问题描述
我正在使用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屋!