思路

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编程啊。明天再更新吧。

通过XML标记生成word的更多相关文章

  1. java 根据word xml模板生成word

    这里用的是poi相关jar包以及freemarker插值技术实现,poi相关jar包这里不再述说 1,编辑word并保存为xml 2,把xml后缀改为ftl文件 3,前端代码 // alert(jso ...

  2. 通过xml生成word文档

    Xml生成word总结 使用xml生成word的基本步骤在<使用xslt转化xml数据形成word文档导出.doc>中说明比较清楚了.但是其中的细节并未说到,因此自己折腾了两天总算成功了. ...

  3. php 备份数据库代码(生成word,excel,json,xml,sql)

    单表备份代码: 复制代码代码如下: <?php class Db { var $conn; function Db($host="localhost",$user=" ...

  4. FreemarkerJavaDemo【Android将表单数据生成Word文档的方案之一(基于freemarker2.3.28,只能java生成)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个方案只能在java中运行,无法在Android项目中运行.所以此方案是:APP将表单数据发送给后台,后台通过freemarker ...

  5. java生成word的几种方案

    http://blog.sina.com.cn/s/blog_a5e968370101crtl.html 1. Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建 ...

  6. JAVA生成word的几种方法对比

    首先介绍几种java导出word方案 1.Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过JNI的方式实现 ...

  7. 使用Java生成word文档(附源码)

    当我们使用Java生成word文档时,通常首先会想到iText和POI,这是因为我们习惯了使用这两种方法操作Excel,自然而然的也想使用这种生成word文档.但是当我们需要动态生成word时,通常不 ...

  8. Aspose.Words简单生成word文档

    Aspose.Words简单生成word文档 Aspose.Words.Document doc = new Aspose.Words.Document(); Aspose.Words.Documen ...

  9. POI生成WORD文档

    h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...

  10. 使用freemarker生成word,步骤详解并奉上源代码

    1.   步骤 1.    用word编辑好模板 1. 普通字符串替换为 ${string} 2. 表格循环用标签 <#list userList as user> 姓名:${user.u ...

随机推荐

  1. QImage:使用QImage构造函数加载图像和使用成员函数loadFromData加载图像的区别

    结论: QImage构造函数,既可以加载内存图像数据,也可以加载二进制文件数据 loadFromData成员函数,只能加载二进制文件数据 loadFromData Qt帮助文档说明 编写测试代码验证 ...

  2. openGauss2.1.0在openEuler 20.03 LTS SP2 安装后,yum无法使用的问题解决

    openGauss2.1.0 在 openEuler 20.03 LTS SP2 安装后,yum 无法使用的问题解决 一.环境描述 操作系统: openEuler 20.03 LTS openEule ...

  3. Asp-Net-Core开发笔记:使用alpine镜像并加入健康检查

    前言 使用 docker 部署 AspNetCore 应用已经是标配了,之前我一直使用 mcr.microsoft.com/dotnet/aspnet:8.0 这类镜像,简单粗暴,不过可以使用 alp ...

  4. Qt 从 QTransform 逆向解出 Translate/Scale/Rotate(平移/缩放/旋转)分析

    QTransform 用于图形绘制,它定义了如何平移(translate).缩放(scale).切变(shear).旋转(rotate)或投射(project)坐标系.注意:QTransform 是作 ...

  5. Oracle 在PL/SQL将字符串分割输出

    Oracle 在PL/SQL将字符串分割输出 示例如下: declare begin for maina in (select tt.line ll from (select regexp_subst ...

  6. 阿里云日志服务SLS携手观测云发布可观测性解决方案,共建可观测应用创新

    简介: 2022年云栖大会期间,阿里云同观测云共同发布可观测性联合解决方案.观测云通过集成日志服务SLS的产品能力,发布了观测云SAAS专属版. 2022年云栖大会期间,阿里云同观测云共同发布可观测性 ...

  7. 社区首款 OAM 可视化平台发布!

    作者 | 徐运元,杭州谐云科技合伙人及资深架构师,云计算行业和 Kubernetes 生态资深从业者 导读:什么是 OAM?2019 年 10 月 17 日,阿里巴巴合伙人.阿里云智能基础产品事业部总 ...

  8. 更便捷:阿里云DCDN离线日志转存全新升级

    简介: 1月6日,阿里云CDN年度产品升级发布会中,阿里云CDN产品专家邓建伟宣布DCDN离线日志转存全新升级,并对离线日志转存方案的价值.应用及使用进行了详细解读. 在日常CDN加速服务过程中会产生 ...

  9. KubeVela v1.3 多集群初体验,轻松管理应用分发和差异化配置

    ​简介:KubeVela v1.3 在之前的多集群功能上进行了迭代,本文将为你揭示,如何使用 KubeVela 进行多集群应用的部署与管理,实现以上的业务需求. 作者:段威(段少) 在当今的多集群业务 ...

  10. 如何避免出现SQL注入漏洞

    ​简介: 本文将针对开发过程中依旧经常出现的SQL编码缺陷,讲解其背后原理及形成原因.并以几个常见漏洞存在形式,提醒技术同学注意相关问题.最后会根据原理,提供解决或缓解方案. ​ 作者 | 阿里云安全 ...