根据NVeloDocx Word模板引擎生成Word(四)
前面介绍了《E6低代码开发平台》的Word模版引擎NVeloDocx,实现了表单的基本字段、子表、单张图片、二维码、条形码怎么基于NVelocity脚本输出到Word文件,都是些比较简单且常用的需求。
本篇介绍怎么基于NVeloDocx在Word中插入图表,目前只支持柱状图,折线图,饼图。
当前只支持这3种图表的原因主要还是在Word中插入图表实在是有点困难,这种困难主要体现在软件编码上,很难找到相关的可参考代码,Open Xml SDK仅有的例子都是基于Excel的,拿过来压根不能用。而网络上很少例子,即使有也是基于Open Xml SDK 2.X的,不兼容Open XML SDK 3。
后来基于V2.5的工具Open XML SDK 2.5 Productivity Tool,花费大量的时间才最终把这3个图表的生成代码写出来,个中滋味不足为外人道!
当然花费这么大的代价最终也是很值得的,方便了我们自己,同时也方便了E6的用户,毕竟E6开发平台是永久免费开放的,且绝大部分都是没有软件基础的,要他们去开发个插件基本不可能。
下面进入正题:
要插入图表,首先得有数据源,Word图表的数据源就是一个如下类似的表格,所以能生成图表的也就是子表数据了:
Word图表的数据格式
那么就需要我们在E6的Word模版数据源配置中,选择好子表,这样才能把对于子表的数据读取出来。由于E6开发平台是完全免费开放的,所以如果想实操,请自行注册下载安装。
在E6中设置好数据源
其实整个过程最主要的就是设置好数据子表。图表所需要的子表的操作和E6表单上的子表操作完全相同,可以是主表单上的某个子表,也可以是某个表单的汇总信息,甚至存储过程返回的数据都可以。和普通子表不一样的地方在于,需要一个非数字列,其他的都是数字列(如上图中,非数字列为:保险公司,数字列为:保单保费、折标保费),因为图表显示的数据格式要求如此。
定义好数据后,插入图表的操作就是一行代码了:
柱状图:使用word.InsertBarChart()方法插入柱状图,包括4个参数,如下:
${word.InsertBarChart(${data.GetChild("Policy","DataGridViewForGroupBy1")},"保单汇总",140,90)}
参数1:子表,通过${data.GetChild("Policy","DataGridViewForGroupBy1")}获得子表数据,其中Policy表示子表编号(在E6中,每个表单都有一个编号),DataGridViewForGroupBy1表示控件名(在E6开发平台中可以查看)。
参数2:图表标题,如“保单汇总”;
参数3:图表宽,如“140”(单位毫米);
参数4:图表高,如“90”(宽度毫米)。
柱状图
基于NVeloDocx是不是非常容易理解?虽然整个开发过程非常困难,但是最终用户的使用就是这么简单。
折线图和饼图的使用方法,除了方法名不一样以外,其他参数都是相同的,所以就不再一一介绍。
折线图:折线图的方法是word.InsertLineChart
${word.InsertLineChart(${data.GetChild("Policy","DataGridViewForGroupBy1")},"保单汇总",140,90,"Stacked")}
折线图
饼图:饼图的方法是word.InsertPieChart
${word.InsertPieChart(${data.GetChild("Policy","DataGridViewForGroupBy1")},"保单汇总",140,90)}
饼图
Word支持很多的图表,但是很多都是基于这3中基本图表的变化,所以想把所有图表都实现其实也是没有太多意义的。
写在最后:基于E6开发平台的NVeloDocx,整个Word模版制作非常容易。
相信使用过NVelocity模版引擎的人都知道,这个模版引擎确实很强,就是出问题排查的时候实在头痛,特别是模版内容很多且命令很多的时候。但是NVeloDocx自带了NVelocity命令错误检测功能(很智能吧?),能够检测到具体是Word模版中哪一段的命令错误,错误原因大概是什么,最多的情况就是命令不正确,#if,#foreach等缺少对应的#end,以及括号是否匹配等等。毕竟E6开发平台的用户绝大部分都是无任何编程经验的。
相关文章:

根据NVeloDocx Word模板引擎生成Word(四)
前面介绍了《E6低代码开发平台》的Word模版引擎NVeloDocx,实现了表单的基本字段、子表、单张图片、二维码、条形码怎么基于NVelocity脚本输出到Word文件,都是些比较简单且常用的需求。 本篇介绍怎么基于NVeloDocx在Word中插入图表,目前只支持…...

C++笔记---stack和queue
1. stack的介绍及重要接口 stack---栈,是一种“先进后出,后进先出”的数据结构。 此处的stack是STL库中定义的一个类模板,用于实例化出存储各种类型数据的栈。 bool empty() const;判断栈是否为空(空true/非空false)size_t size() const;返…...

springboot Rabbit MQ topic 配置文件绑定队列和交换机
Spring Boot 中如何将队列和交换机绑定(含实例讲解) 在使用 Spring Boot 开发高并发的秒杀系统或者其他场景时,RabbitMQ 是常用的消息队列中间件之一。本文将详细讲解如何在配置类中通过代码将队列与交换机绑定,并指定路由键来实…...

Visual Studio 2019密钥
Visual Studio 2019 Enterprise(企业版):BF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 2019 Professional(专业版):NYWVH-HT4XC-R2WYW-9Y3CM-X4V3Y...

【三元组枚举中点】【树状数组】个人练习-Leetcode-1395. Count Number of Teams
题目链接:https://leetcode.cn/problems/count-number-of-teams/description/ 题目大意:给一个数组rating[],求符合以下任一条件的三元组i, j, k的个数 rating[i] < rating[j] < rating[k]rating[i] > rating[j] > rating[k] …...

Anaconda 中遇到CondaHTTPError: HTTP 404 NOT FOUND for url的问题及解决办法
最近在跑一个开源项目遇到了以下问题,查了很多资料都大(抄)同(来)小(抄)异(去)的,解决不了根本问题,费了很大的劲终于得以解决,记录如…...

数据库系统 第51节 数据库事务管理
数据库事务管理是数据库管理系统(DBMS)中用于确保数据完整性和一致性的一组机制。事务是一组不可分割的操作序列,这些操作要么全部成功,要么全部失败。以下是数据库事务管理的关键组成部分的详细叙述: 1. 事务隔离级别…...

分解+优化+组合+对比!核心无忧!VMD-SSA-Transformer-LSTM多变量时间序列光伏功率预测
分解优化组合对比!核心无忧!VMD-SSA-Transformer-LSTM多变量时间序列光伏功率预测 目录 分解优化组合对比!核心无忧!VMD-SSA-Transformer-LSTM多变量时间序列光伏功率预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.…...

二十三种设计模式之建造者模式(类比汽车制造厂好理解一些)
目录 1. 设计模式的分类 2. 定义 3. 建造者模式通常包含以下几个角色 4. 示例代码 5. 建造者模式的主要优点 1. 设计模式的分类 创建型模式(五种):工厂方法模式、单例模式、抽象工厂模式、原型模式、建造者模式。 结构型模式(七种):适配器模式、代…...

macos 系统文件操作时提示 Read-only file system 解决方法
这个情况是因为文件系统为只读, 需要我们执行一下命令重新将系统文件挂载为读写模式, 命令如下: sudo mount -uw / 这里的 mount 就是硬盘挂载命令, 后面的 -uw选项说明如下, 最后的 / 表示的是跟目录, 可以指定要修改的挂载路径,也可以默认. -u -u标志表示应更改已装载文…...

银行业务架构指导应用架构规划及设计方法
摘要 业务架构指导应用架构设计方法是指依托业务架构设计成果,开展应用架构应用划分设计、IT服务分层设计和数据模型设计的方法。通过业务架构指导应用架构设计,以IT研发项目驱动的方式,由IT系统落地业务架构设计成果,实现对业务流程快速拼接和产品灵活配置的支持,从而提升…...

最全面IO流介绍
1.字符集介绍 标准ASCII字符集:使用1个字节存储一个字符,首尾是0,总可以表示128个字符。是美国信息交换标准代码,包含英文、符号等等。 GBK汉字编码字符集,包含2万多个汉字等字符,GBK中一个中文字符编码成…...

fastadmin 文件上传腾讯云
1-安装腾讯云SDK composer require qcloud/cos-sdk-v5 2-腾讯云配置 <?phpnamespace app\common\controller;use Qcloud\Cos\Client; use think\Controller; use think\Db;class Tencent extends Controller {/*** 上传文件* param $config* param $key* return array*/p…...

《机器学习》—— PCA降维
文章目录 一、PCA降维简单介绍二、python中实现PCA降维函数的介绍三、代码实现四、PCA降维的优缺点 一、PCA降维简单介绍 PCA(主成分分析,Principal Component Analysis)是一种常用的数据降维技术。它通过线性变换将原始数据转换到新的坐标系…...

植物三萜皂苷生物合成途径及调控机制研究进展-文献精读48
摘要 三萜皂苷(triterpenoids saponins)是由三萜皂苷元和一个或多个糖基和/或其他化学基团缩合而成的一系列结构多样的天然化合物[1], 主要分布在五加科、蝶形花科、石竹科、桔梗科、毛茛科、玄参科、葫芦科等植物中[2]. 植物中三萜皂苷常分布在特定的器官和组织, 如人参(Pana…...

server 2016搭建FTP服务
目录 一、实验环境 二、在server 2016上面安装FTP服务 三、在server 2016上面配置FTP服务 四、创建用户(也可创建用户组,给用户组赋予权限) 一、实验环境 windows server 2016用于安装ftp服务 windows 10作为客户端进行测试。 二、在s…...

物理学基础精解【4】
文章目录 运动和力质点运动机械运动的参考系运动的相对性运动学中坐标系 参考文献 运动和力 质点运动 一个物体相对于另一个物体的位置或一个物体的某些部分相对于其他部分的位置 ,随着时间而变化的过程,叫机械运动 。质点是一个物理学中的理想化模型&…...

【区块链 + 人才服务】Blockchain Workshop- 区块链编程实践平台 | FISCO BCOS应用案例
Blockchain Workshop v2.0(以下简称 BCW v2.0)是点宽网络科技有限公司升级的全新区块链实践教育平台产品。 BCW v2.0 区块链实践教育平台面向高校区块链专业人才培养,用于区块链专业技术学习和智能合约编程学习,平台基于 FISCO BC…...

Java面试篇基础部分-Java中常用的I/O模型
阻塞I/O模型 阻塞式的I/O模型是一种非常常见的I/O模型机制,在进行数据读写操作的时候,客户端会发生阻塞等待。 工作流程如图所示,该用户线程一直阻塞,等待内存中的数据就绪;内存中的数据就绪之后,内核态的数据将拷贝到用户线程中,并且返回I/O的执行结果到用户线程。这个…...

如何使用python运行Flask开发框架并实现无公网IP远程访问
文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask,以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架,采用Python编程语…...

第三届828 B2B企业节开幕,大腾智能携手华为云共谱数字化新篇章
8月27日,由华为携手上万家伙伴共同发起的第三届828 B2B企业节在贵州正式开幕。 本届企业节推出上万款数智产品,600多个精选解决方案,旨在融通数智供需,加速企业智改数转,助推中国数智产业实力再升级。中共贵州省委副书…...

Linux网络编程IO管理
网络 IO 涉及到两个系统对象,一个是用户空间调用 IO 的进程或者线程,一个是内核空间的内核系统,比如发生 IO 操作 read 时,它会经历两个阶段: 等待内核协议栈的数据准备就绪;将内核中的数据拷贝到用户态的…...

SpringCloud集成ELK
1、添加依赖 <dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>6.1</version> </dependency>2、在logback-spring.xml中添加配置信息(logback-sp…...

【卷起来】VUE3.0教程-06-组件详解
各位看官,点波关注和赞吧 组件允许我们将 UI 划分为独立的、可重用的部分,并且可以对每个部分进行单独的思考。在实际应用中,组件常常被组织成层层嵌套的树状结构: 这和我们嵌套 HTML 元素的方式类似,Vue 实现了自己的…...

JS Web
Web API 元素通用属性 元素自身属性 事件处理...

【Linux】传输层协议——UDP
零、传输层的作用是负责数据能够从发送端传输到接收端 一、再来认识一下端口号 端口号(Port)标识了一个主机进行通信的不同的应用程序。在TCP/IP协议中,用“源IP”,“源端口号”,“目的IP”,“目的端口号”…...

算法学习攻略总结 : 入门至进阶,通关之路指南
❃博主首页 : <码到三十五> ☠博主专栏 : <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 : <搬的每块砖,皆为峰峦之基;公众号搜索(码到…...

《卷积神经网络 CNN 原理探秘》
CNN基本原理详解 卷积神经网络(Convolutional Neural Network,简称CNN),是一种前馈神经网络,人工神经元可以响应周围单元,可以进行大型图像处理。卷积神经网络包括卷积层和池化层。 卷积神经网络是受…...

C#获取计算机信息
目录 效果 项目 代码 下载 效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Management; n…...

派遣函数 - 通过设备链接打开设备
利用文件IO相关的Wn32API对设备进行“打开”和“关闭”操作。要打开设备,必须通过设备的名字才能得到该设备的柄。前面介绍过,每个设备都有设备名称,如HelloDDK驱动程序的设备名为“Device\\MyDDKDevice”,但是设备名无法被用户模…...