C# xml操做word-->word轉2003xml

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
                   );
        }
    }
View Code

  具體執行代碼:

        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;
        }
View Code

 8.第八步,運行程序,就能夠獲得一個你想要的word文檔了

相關文章
相關標籤/搜索