zoukankan      html  css  js  c++  java
  • C# XSLT 转换word 生成word

    1.简介

     Extensible Stylesheet Language Transformations (XSLT)  扩展样式语言转换。可以将一种格式xml转换成另一种格式xml

    https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-4.0/ms256069(v=vs.100)

    原始xml文档如下:

     其中,genre表示类别  ,下级movie 表示电影,movie含有两个属性(名称和发行年份)

    2.word2007

    https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2007/ee872374(v=office.12)?redirectedfrom=MSDN

    打开word并添加模板文字,并保存

     将word添加后缀名wordTemplate.docx.zip,用压缩工具打开,将里面的document.xml复制出来。

     添加文件名后缀【.xslt】:document.xml.xslt,然后用文本编辑工具打开。

    添加<xsl:stylesheet>标签

     将<w:document>标签的内容简化(因为很多内容我们是不知道,也不需要的,为了方便查看,只保留w空间下的标签,即 w:body,w:p,w:r之类的)

    添加<xsl:for-each>和<xsl:value-of >两个标签,用来替换原有模板(因为例子xml数据中,存在两个嵌套,所以用两个for-each)

    完成后保存,即我们的xslt模板就建立好了

    安装Open xml SDK:http://www.microsoft.com/downloads/details.aspx?familyid=c6e744e5-36e9-45f5-8d8c-331df206e0d0&displaylang=en

    visual studio里添加引用

    添加代码

      //读取xslt  扩展样式语言转换表
                XslCompiledTransform transform = new XslCompiledTransform();
                FileStream fs = new FileStream("document.xml.xslt", FileMode.Open);
                transform.Load(new XmlTextReader(fs));
    
                //结果数据
                StringWriter stringWriter = new StringWriter();
                XmlWriter xw = XmlWriter.Create(stringWriter);
    
                //转换
                transform.Transform("XMLFile1.xml", xw);
    
                XmlDocument newWordContent = new XmlDocument();
                newWordContent.LoadXml(stringWriter.ToString());
    
                using (WordprocessingDocument output = WordprocessingDocument.Create("output.docx", WordprocessingDocumentType.Document))
                {
                    var mainPart = output.AddMainDocumentPart();
                    mainPart.Document = new Document();
                    Body updatedBodyContent = new Body(newWordContent.DocumentElement.InnerXml);
    
                    //Replace the existing Document Body with the new content.
                    output.MainDocumentPart.Document.Body = updatedBodyContent;
    
                    //Save the updated output document.
                    output.MainDocumentPart.Document.Save();
                }

    效果:

    3.word2003

    2003和2007不同,2007是压缩包,而word2003可以直接读取xml格式文件。

    参考文档:https://dradisframework.com/support/guides/reporting/xslt_reports.html

    https://www.cnblogs.com/yxli2008/p/11073549.html

    步骤跟2007类似:

    新建word,编辑模板及样式,另存为,选择我认得 2003 xml文档:

     其他步骤一样

    代码:

     Assembly executingAssembly = Assembly.GetExecutingAssembly();
                Stream manifestResourceStream = executingAssembly.GetManifestResourceStream("模板生成Word_2013.wordTemplate2013.xml.xslt");
    
                XslCompiledTransform xslCompiledTransform = new XslCompiledTransform(false);
              
                xslCompiledTransform.Load(new XmlTextReader(manifestResourceStream));
    
                 
                FileInfo fileInfo = new FileInfo("aaa.doc");
                StreamWriter streamWriter = fileInfo.CreateText();
                xslCompiledTransform.Transform("XMLFile1.xml", null, streamWriter);
                streamWriter.Close();

    4.源码

    个人更推荐用2003,因为更简单,不需要Open xmlSdk,且结构更简单。

    https://files.cnblogs.com/files/lizhijian/20201028xslt%E6%A8%A1%E6%9D%BF%E7%94%9F%E6%88%90word.rar

  • 相关阅读:
    MFC绘制直角坐标系
    mfc画波形函数
    ciscn_2019_ne_5
    ciscn_2019_n_5
    [ZJCTF 2019]NiZhuanSiWei
    ciscn_2019_n_1
    pwn-100
    2014提高组笔试错题
    BZOJ3211: 花神游历各国
    主席树模板
  • 原文地址:https://www.cnblogs.com/congqiandehoulai/p/13895393.html
Copyright © 2011-2022 走看看