• 通过XML标记生成word


    思路

    word生成可以通过标签,也可以通过XML元素。

    word文档实际上是由文档对象模型描述的,因此我们能够通过对文档对象进行操作去生成word。

    由于word允许我们附加XML结构(元素),如下:(2003在工具中)

    实际上就是允许我们向其中添加XML节点,因此我们可以利用XSD定义自己的XML元素,然后在word中附加XSD文档。

    添加我们的元素后,将word转化为xslt样式表。

    最后通过代码将XML数据装入样式表,并将其转化为XML或word,实现word生成。

    步骤

    一,定义XML元素

    XSD定义XML元素教程

    https://www.w3school.com.cn/schema/index.asp

    XSD主要就是让我们可以自定义元素(element)和元素的类型(type)

    我们定义如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="Simple" targetNamespace="Simple" elementFormDefault="qualified" attributeFormDefault="unqualified">   
    <!-------------------------------类型-------------------------> 
       
        <xs:complexType name="CellClass" mixed="true">
            <xs:annotation>
                <xs:documentation>单元格类型</xs:documentation>
            </xs:annotation>
            <xs:attribute name="ColumnName" type="xs:string"/>     
            <xs:attribute name="DataType" type="dataType"/>
            <xs:attribute name="Format" type="xs:string">
                <xs:annotation>
                    <xs:documentation>当DataType为number时有效</xs:documentation>
                </xs:annotation>
            </xs:attribute>
        </xs:complexType>
    <xs:complexType name="AreaHClass" mixed="true"> <xs:annotation> <xs:documentation>行类型</xs:documentation> </xs:annotation> <xs:sequence minOccurs="0" maxOccurs="unbounded"> <xs:element name="Cell" type="CellClass" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="TableName" type="xs:string"/> <xs:attribute name="MinRows" type="xs:int"/> </xs:complexType>
    <xs:simpleType name="dataType"> <xs:annotation> <xs:documentation>数据类型</xs:documentation> </xs:annotation> <xs:restriction base="xs:string"> <xs:enumeration value="date"/> <xs:enumeration value="string"/> <xs:enumeration value="number"/> </xs:restriction> </xs:simpleType>

    <!-------------------------------元素------------------------->

        <xs:element name="Cell" type="CellClass">
            <xs:annotation>
                <xs:documentation>单元格节点</xs:documentation>
            </xs:annotation>
        </xs:element>
    <xs:element name="AreaH" type="AreaHClass"> <xs:annotation> <xs:documentation>行节点</xs:documentation> </xs:annotation> </xs:element>

    </xs:schema>

    二,构建word文档

    1.在word中引入XSD

    2.添加XML元素

     鼠标右键选择应用XML元素,对一行应用AreaH元素,为AreaH添加子元素Cell。

    在Cell中添加0作为标识,后面要用。

     

     在各个标记右键属性,为各个元素添加属性值

    三,将文档转化为模板

     

     保存为XML文档,之后用记事本编辑。

    全选剪切后,到https://c.runoob.com/front-end/710,对字符串格式化

     在粘贴回记事本(也可以用vs打开).

    找到我们标识为0的元素

     替换0为

    <xsl:value-of select="这里填文档里面对应标记的属性值"/>

    一共要替换4个

     根据提示引入命名空间

    并在最后面加上闭合标签</xsl:stylesheet>

    加上这两句,并在相应位置添加闭合标签

     将数据行放入循环,读取每一行数据

    四,定义XML数据

    <?xml version="1.0" encoding="utf-8"?>
      <Students>
        <tableName>
          <姓名>张三</姓名>
          <年龄>20</年龄>
          <性别></性别>
          <学号>201633362225</学号>
        </tableName>
        <tableName>
          <姓名>李四</姓名>
          <年龄>21</年龄>
          <性别></性别>
          <学号>201633362131</学号>
        </tableName>
        <tableName>
          <姓名>万五</姓名>
          <年龄>21</年龄>
          <性别></性别>
          <学号>201633362310</学号>
        </tableName>
      </Students>

    要注意tableName就是AreaH的属性值,其他类推

    实际上这种XML文档可由 DataSet的WriteXml(要生成的数据文档的路径)方法得到。

    五,将数据导入模板

    using System.Xml.Xsl;
    。
    。
    。
    private void button3_Click(object sender, EventArgs e)
    {
        XslCompiledTransform xslTrans = new System.Xml.Xsl.XslCompiledTransform();
        xslTrans.Load("学生.xml");//加载模板文件
        xslTrans.Transform("StudentsData.xml", "学生数据.doc");
        MessageBox.Show("生成");
     }

    这里我用了一个Button控制,执行上述代码后即可看到已生成成功,去生成的地方找到它,打开。

     只是目前我还没研究如何去除XML标记,不过总的来说已经实现了生成word。

    追加

    这几天继续深入研究xslt和word,已经解决了XML标记的问题,实际上就是xslt编程啊。明天再更新吧。

  • 相关阅读:
    201521123063 《Java程序设计》 第8周学习总结
    201521123063 《Java程序设计》 第7周学习总结
    201521123064 《Java程序设计》第11周学习总结
    201521123064 《Java程序设计》第10周学习总结
    201521123064 《Java程序设计》第9周学习总结
    201521123064 《Java程序设计》第8周学习总结
    201521123064 《Java程序设计》第7周学习总结
    201521123064 《Java程序设计》第6周学习总结
    201521123064 《Java程序设计》第5周学习总结
    201521123064 《Java程序设计》第4周学习总结
  • 原文地址:https://www.cnblogs.com/ggtc/p/12770526.html
Copyright © 2020-2023  润新知