一个基于Excel模板快速生成Excel文档的小工具

介绍

DocumentGenerator是一个Excel快速生成工具,目标以后还能实现Word、pdf等的文件的生成。该程序独立运行,可通过HTTP接口调用其生成接口。
典型使用场景为如下:

  1. 使用者编写模板文件
  2. 使用者准备模板文件的填充JSON数据内容
  3. 使用者通过网络接口调用该程序服务完成模板数据自动加载JSON内容,并生成最终文件。

工具目录如下图所示(红色框选的便是),文件生成的服务程序,其中"_d"结尾的是调试版,没有"_d"结尾的是发布版,两个版本功能一样。

下方的DocumentGeneratorTestGui工具是一个测试工具,为了方便功能测试使用。

DocumentGeneratorService工具介绍

DocumentGeneratorService是独立运行的文件生成工具,对外提供了HTTP接口服务,用于生成文档。工具启动成功提示如下图所示:

DocumentGeneratorTestGui工具介绍

DocumentGeneratorTestGui工具为测试小工具,主界面如下所示:

通过选择模板excel文件,填写json数据,点击生成即可根据选择的模板文件以及当前设置的json内容,即可直接生成excel文件。

JSON内容

json数据是调用服务时需要传递的内容部分,HTTP的POST方法调用实例如下:

POST http://127.0.0.1:8080/generate/xlsx HTTP/1.0
content-type: application/json

{
    "template": "templates/example_01_property.xlsx",
    "outputPath": "outputFiles/outFile_example_01_property.xlsx",
    "data": {
        "proName":"这是属性名字"
    }
}
  • "template":指定生成文档时使用的模板文件路径。
  • "outputPath":指定生成文档时保存的模板文件路径。
  • “data”属性内容(Json-Object)即为调用服务生成文档时的数据部分。data结点的内容是模板文件的数据源。DocumentGeneratorTestGui工具的JSON数据就是这里的“data”结点的内容。

模板Excel文件制作

DocumentGenerator/templates目录已经存放了部分典型模板文件。当前程序支持属性、循环指令,用户通过灵活配合指令的使用即可完成复杂模板内容的填充。

指令语法:{@<cmd>:<params>}

属性指令(p)

${@p:proName},proName代表属性名称,用于提取请求json数据内容的proName字段值。

可以简写为${proName}。

简单示例1

比如请求的数据内容如下:

{
    "proName":"这是属性名字"
}

那么${@p:proName}就代表了取JSON数据的“proName”结点的值替换该表格,生成过程将自动把指令换成了“这是属性名字”。

生成的文件如下:

简单示例2

如下方模板文件,属性可以通过"."操作符获取子属性。

使用JSON数据为:

{
    "proName":"这是属性名字",
    "cell1":"A",
    "cell2":"B",
    "cell3":"C",
    "cell4":"D",
    "cell5":"E",
    "cell6":"F",
    "cell7":"G",
    "cell8":"H",
    "user":{
        "name":"张三",
        "sex":"男",
        "title":"是个帅气的小伙儿"
    }
}

生成的内容如下:

循环指令(for_*)

循环指令分为水平循环(for_h)和垂直循环(for_v)两种。水平循环用于遍历数据集合,并挨个取集合中的元素值,横向排布填充excel的表格;垂直循环用于遍历数据集合,并挨个取集合中的元素值,纵向排布填充excel的表格。

综合示例

比如模板内容如下:

JSON内容如下:

{
	"testName":"for测试示例",
	"cells":["A","B","C","D","E","F","G","H"],
	"products":[
		{
			"id":1,
			"name":"矿泉水",
			"price":1.5
		},{
			"id":2,
			"name":"中华香烟",
			"price":45.5
		},{
			"id":3,
			"name":"打火机",
			"price":0.5
		}
	]
}

生成的结果如下:

接口调用

HTTP接口

HTTP接口提供以HTTP POST方式调用文档生成功能。上节的示例中已经介绍过,这里不再赘述。

POST http://127.0.0.1:8080/generate/xlsx HTTP/1.0
content-type: application/json

{
    "template": "templates/example_01_property.xlsx",
    "outputPath": "outputFiles/outFile_example_01_property.xlsx",
    "data": {
        "proName":"这是属性名字"
    }
}


### 测试POST jSON数据
POST http://127.0.0.1:8080/generate/xlsx HTTP/1.0
content-type: application/json

{
    "template": "templates/example_02_property.xlsx",
    "outputPath": "outputFiles/outFile_example_02_property.xlsx",
    "data": {
        "proName":"这是属性名字",
        "cell1":"A",
        "cell2":"B",
        "cell3":"C",
        "cell4":"D",
        "cell5":"E",
        "cell6":"F",
        "cell7":"G",
        "cell8":"H",
        "user":{
            "name":"张三",
            "sex":"男",
            "title":"是个帅气的小伙儿"
        }
    }
}


### 测试POST jSON数据
POST http://127.0.0.1:8080/generate/xlsx HTTP/1.0
content-type: application/json

{
    "template": "templates/example_03_for.xlsx",
    "outputPath": "outputFiles/outFile_example_03_for.xlsx",
    "data": {
        "testName":"for测试示例",
        "cells":["A","B","C","D","E","F","G","H"],
        "products":[
            {
                "id":1,
                "name":"矿泉水",
                "price":1.5
            },{
                "id":2,
                "name":"中华香烟",
                "price":45.5
            },{
                "id":3,
                "name":"打火机",
                "price":0.5
            }
        ]
    }
}

其他待扩展接口

目前还没实现其他接口,待扩展。

特别声明

该软件为个人开发软件,只用于同行们测试相互学习使用。不可直接用于商业用途,谢谢。

如需商业应用请主动邮箱联系作者洽谈,谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/108984.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DevOps持续集成-Jenkins(1)

文章目录 DevOpsDevOps概述Code阶段工具&#xff08;centos7-gitlab主机&#xff09;Windows下安装Git&#xff08;作用是&#xff1a;使我们可以上传代码到GitLab&#xff09;Linux下安装GitLab⭐&#xff08;作用是&#xff1a;运行一个GitLab接收代码&#xff09;环境准备先…

机器学习 | 决策树算法

一、决策树算法概述 1、树模型 决策树&#xff1a;从根节点开始一步步走到叶子节点(决策)。所有的数据最终都会落到叶子节点&#xff0c;既可以做分类也可以做回归。 在分类问题中&#xff0c;表示基于特征对实例进行分类的过程&#xff0c;可以认为是if-then的集合&#xff0…

JavaWeb 怎么在servlet向页面输出Html元素?

service()方法里面的方法体&#xff1a; resp.setContentType("text/html;charsetutf-8");//获得输出流PrintWriter对象PrintWriter outresp.getWriter();out.println("<html>");out.println("<head><title>a servlet</title>…

CNN 网络结构简介

本文通过整理李宏毅老师的机器学习教程的内容&#xff0c;介绍 CNN&#xff08;卷积神经网络&#xff09;的网络结构。 CNN 网络结构, 李宏毅 CNN 主要应用在图像识别&#xff08;image classification, 图像分类&#xff09;领域。 通常&#xff0c;输入的图片大小相同&am…

【idea】使用教程:idea 打开项目、配置、项目打包详细教程

目录 一、配套软件安装 二、打开已有项目 三、配置 jdk 四、项目打包 五、服务器首次创建目录 &#xff08;1&#xff09;后端代码目录 &#xff08;2&#xff09;前端代码目录 &#xff08;3&#xff09; 打包后的代码包上传到服务器上 一、配套软件安装 【idea】wi…

Linux之线程池

线程池 线程池概念线程池的应用场景线程池实现原理单例模式下线程池实现STL、智能指针和线程安全其他常见的各种锁 线程池概念 线程池&#xff1a;一种线程使用模式。 线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。而线程池维护着多个线程&#xff0c;等待…

QT5.15在Ubuntu22.04上编译流程

在我们日常遇到的很多第三方软件中&#xff0c;有部分软件针对开发人员&#xff0c;并不提供预编译成果物&#xff0c;而是需要开发人员自行编译&#xff0c;此类问题有时候不是问题&#xff08;编译步骤的doc详细且清晰时&#xff09;&#xff0c;但有时候又很棘手&#xff08…

【Proteus仿真】【Arduino单片机】直流电机和步进电机

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用蜂鸣器、按键、直流电机、步进电机、ULN2003、L293D等。 主要功能&#xff1a; 系统运行后&#xff0c;K3键启动运行&#xff0c;K1和K2键控制…

HashJoin 在 Apache Arrow 和PostgreSQL 中的实现

文章目录 背景PostgreSQL HashJoin实现PG 执行器架构HashJoin 基本流程HashJoin 实现细节Join 类型HashJoin 的划分阶段HashJoin 的分批处理阶段JOIN 类型的状态机转换HashJoin 的投影和过滤 Arrow Acero HashJoin实现Acero 基本框架HashJoin 基本流程 总结 背景 近两个月转到…

YUV编码格式解析

YUV 颜色编码 YUV 颜色编码采用的是 明亮度 和 色度 来指定像素的颜色。 其中&#xff0c;Y 表示明亮度&#xff08;Luminance、Luma&#xff09;&#xff0c;而 U 和 V 表示色度&#xff08;Chrominance、Chroma&#xff09;。 而色度又定义了颜色的两个方面&#xff1a;色…

知识管理的PSCA循环

前言&#xff1a;在PMP备考第二章《环境》部分&#xff0c;面对项目的复杂性&#xff0c;提到了知识管理的PSDA循环&#xff0c;本篇博客主要谈一下什么是PSDA循环&#xff0c;以及我们面对复杂的环境&#xff0c;如何提升自己的学习能力和认知水平。 目录 知识的冰山模型 P…

搭建微信小程序环境及项目结构介绍

一、注册 访问微信公众平台&#xff0c;将鼠标的光标置于账号分类中的小程序上&#xff0c; 点击‘查看详情’ 点击“前往注册” 下方也可以点击注册&#xff1a; 小程序注册页面&#xff1a; 步骤a:进入小程序注册页&#xff0c;根据指引填写信息和提交相应的资料&#x…

OpenAI : GPT-4 发布更新,整合了画图、插件、代码等能力

本心、输入输出、结果 文章目录 OpenAI : GPT-4 发布更新,整合了画图、插件、代码等能力前言GPT-4 的复合能力更新中的 automatic (自动的)获取天气我们看看讯飞星火的表现放大后内容并不是我们想要的我们看看百度文心一言的表现弘扬爱国精神OpenAI : GPT-4 发布更新,整合…

prometheus服务发现

Consul简介 ◼ 一款基于golang开发的开源工具&#xff0c;主要面向分布式&#xff0c;服务化的系统提供服务注册、服务发现和配置管理 的功能 ◼ 提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能 部署 curl -LO https://releases.hashicorp…

SpringCloud Alibaba【三】Gateway

Gateway配置与使用 前言新建gateway子项目pom.xml配置文件启动类访问接口方式 测试拓展 前言 在工作中遇到一种情况&#xff0c;一个父项目中有两个子项目。实际使用时&#xff0c;需要外网可以访问&#xff0c;宝信软件只能将一个端口号发布在外网上&#xff0c;所以需要运用…

使用thinkphp6创建项目

使用composer下载安装thinkphp6&#xff0c;命令&#xff1a;composer create-project topthink/think [文件名]如&#xff1a;composer create-project topthink/think thinkphp6&#xff0c;安装完成后如下图安装完成后进入创建的项目文件夹&#xff1a;cd thinkphp6执行命令…

免费活动-11月4日敏捷武林上海站 | Scrum.org CEO 亲临现场

​​​​​​​ 活动介绍 过去的几年里&#xff0c;外界的风云变幻为我们的生活增添了一些不一样的色彩。在VUCA世界的浪潮里&#xff0c;每一个人都成为自己生活里的冒险家。面对每一次的变化&#xff0c;勇于探索未知&#xff0c;迎接挑战&#xff0c;努力追逐更好的自己。…

宝塔面板安装Python和Flask(新版Python项目)

&#xff08;一&#xff09;宝塔面板的项目菜单&#xff0c;打开Python项目的“项目版本管理” 安装Python版本3.10.0。 会创建一个Python版本的文件夹www/server/pyproject_evn/versions/ 会创建一个Python虚拟环境的文件夹www/server/pyproject_evn/python_venv/ &#xf…

4、QtCharts 做心电图

文章目录 ui界面核心代码全部代码 ui界面 核心代码 void Dialog::slot_timer() {qreal xOffset0.f;//x的偏移量,推进的距离qreal dIncrease10;//增加量//数据for(int i0;i<10;i){m_xdIncrease;xOffsetdIncrease;m_splineSerise->append(m_x,qrand()%10);//根据实际情况删…

一、灵动mm32单片机_开发环境的搭建(Keil)

1、安装Keil MDK。 略。 2、安装芯片对应的Pack包。 (1)这里以MM32F0130单片机为例。 (2)进入灵动微电子官网。上海灵动微电子股份有限公司 (3)点击“支持”→“KEILPacl”。 (3)点击下载Pack包。 (4)下载后&#xff0c;解压下载的压缩包&#xff0c;找到对应的Pack包&…
最新文章