1.第一步,準備word模版node
2.第二步,將word模版保存成word2003xml格式。打開word文檔,點擊另存爲,將文件保存爲word 2003 XML文檔。app
3.第三步,以記事本的方式打開xml文件,清理頭部信息。ide
刪除<?mso-application progid="Word.Document"?>測試
4.第四步,記錄xml命名空間this
在IE中打開xml文件,記錄下命名空間spa
http://schemas.microsoft.com/office/word/2003/wordmlcode
http://schemas.microsoft.com/office/word/2003/auxHintxml
5.第五步,加入tag標籤blog
爲了更好的操做xml,能夠在想要替換內容的部分加入標籤tag="tag-name"。element
以記事本的方式打開xml文件,查找節點,輸入標籤。
6.第六步,處理table數據列
table處理時,爲了更好的找到數據列,因此給數據列加入tag="tr-content",結果以下圖:
7.第七步,建立通常處理程序ExportFileHandler.ashx文件
準備一個擴展方法:
public static class Extensions { /// <summary> /// 克隆一個節點 /// </summary> /// <param name="element"></param> /// <returns></returns> public static XElement Clone(this XElement element) { return new XElement(element.Name, element.Attributes(), element.Nodes().Select(n => { XElement e = n as XElement; if (e != null) { return e.Clone(); } return n; } ), (!element.IsEmpty && !element.Nodes().OfType<XText>().Any()) ? string.Empty : null ); } }
具體執行代碼:
public void ProcessRequest(HttpContext context) { context.Response.Clear(); context.Response.AddHeader("content-disposition", "attachment;filename=EmployeeReport.doc"); context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8"); context.Response.ContentType = "application/vnd.ms-word"; XDocument doc = XDocument.Load(context.Server.MapPath("~/Templete/測試.xml")); //開始修改文檔 XNamespace w = "http://schemas.microsoft.com/office/word/2003/wordml"; XNamespace wx = "http://schemas.microsoft.com/office/word/2003/auxHint"; var nodes = doc.Root.Element(w + "body").Descendants(w + "t"); FindAndReplaceNode(nodes, "name", "xxx的院子"); //填充表格 var table = doc.Root.Element(w + "body").Element(w + "tbl");//這是表格 var templateRow = doc.Root.Element(w + "body").Descendants(w + "tr").FirstOrDefault(x => x.Attribute("tag") != null && x.Attribute("tag").Value == "tr-content"); for (int i = 0; i < 10; i++) { var newRow = templateRow.Clone(); var datas = newRow.Descendants(w + "t"); FindAndReplaceNode(datas, "title", "標題"); FindAndReplaceNode(datas, "content", "這是一個測試"); FindAndReplaceNode(datas, "datetime", "2014-03-20"); table.Add(newRow); } templateRow.Remove(); StreamWriter sw = new StreamWriter(context.Response.OutputStream); doc.Save(sw); sw.Flush(); sw.Close(); context.Response.End(); } private void FindAndReplaceNode(IEnumerable<XElement> elements, string tag, string value) { var found = elements.FirstOrDefault(n => n.Attribute("tag") != null && n.Attribute("tag").Value == tag); if (found != null) found.Value = value; }
8.第八步,運行程序,就能夠獲得一個你想要的word文檔了