我正在用asp.net開發一個web應用程序,我有一個名爲Template.docx的文件,它像一個模板一樣工作來生成其他報告。在這個Template.docx裏面,我有一些MergeFields(標題,客戶名稱,內容,頁腳等)替換爲C#中的一些動態內容。我怎樣才能把內容放在docx中的mergefield上
我想知道,如何將內容放入docx中的mergefield中?
我不知道MergeFields是否是正確的方式來做到這一點,或者如果有另一種方式。如果你能建議我,我欣賞! PS:我在我的web應用程序中引用了openxml。
編輯:
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到一個文件中,我有一個損壞的文件。謝謝!
我假設是使用Word藉此在郵件合併是不是一個不錯的選擇? – user957902
不,實際上,我需要填寫這些字段,我想將其替換爲我的動態內容。我不知道MergeFields是否是正確的方法。謝謝! –
通常情況下,您將內容放入MergeField的方式是通過將郵件合併與包含動態內容的數據源進行合併。你使用什麼libaray從asp.net代碼中操作docx文件? – user957902