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

news2024/12/23 18:03:51

介绍

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.coloradmin.cn/o/1148173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32:串口轮询模式、中断模式、DMA模式和接收不定长数据

一.串口轮询模式底层机制&#xff1a; 在STM32每个串口的内部都有两个寄存器&#xff1a;发送数据寄存器(TDR)/发送移位寄存器,当我们调用HAL_UART_Transmit 把数据发送出去时&#xff0c;CPU会将数据依次将数据发送到数据寄存器中&#xff0c;移位寄存器中的数据会根据我们设置…

leetcode做题笔记206. 反转链表

给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1a; 输入&am…

k8s replicaSet,deployment 学习笔记

文章目录 replicaSet 和 deployment 两者的关系。创建滚动更新回滚 replicaSet 和 deployment 两者的关系。 在 Kubernetes 中&#xff0c;ReplicaSet 和 Deployment 都是用来确保某种 Pod 的副本数目。但是&#xff0c;ReplicaSet 和 Deployment 是有差别的&#xff0c;二者的…

【送书福利-第二十二期】《Vue.js 3企业级项目开发实战(微课视频版)》

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;程序员洲洲。 &#x1f388; 本文专栏&#xff1a;本文…

电路器件认识与KV STUDIO的实践(二)

当当当当&#xff0c;下班了&#xff0c;下面来记录一下小编学习到的电气知识与plc的应用吧&#xff01;&#xff01;&#xff01; 目录 电路元器件的认识 断路器&#xff08;作用是过载保护、短路保护、地线故障保护和手动控制&#xff09; 漏电断路器&#xff08;当漏电电…

H5游戏源码分享-考眼力游戏猜猜金币在哪

H5游戏源码分享-考眼力游戏猜猜金币在哪 <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"><meta charset"UTF-8"><meta name"apple-mobile-web-app-capa…

vue3后台管理系统之跨域代理

vite.config.js中 server: {port: 5002,host: true, //0.0.0.0open: false,strictPort: true,proxy: {// 请求前缀/api&#xff0c;只有加了/api前缀的请求才会走代理(前端自定义)/api: {target: http://127.0.0.1:8000,// 获取服务器地址的设置changeOrigin: true,// 路径重写…

LeetCode热题100 240.搜索二维矩阵||

题目描述&#xff1a; 编写一个高效的算法来搜索 m*n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,2…

java项目之时间管理系统(ssm框架)

项目简介 时间管理系统实现了以下功能&#xff1a; 管理员&#xff1a;个人中心、用户管理、分类列表管理、在线学习管理、励志视频管理、活动项目管理、活动报名管理、目标制定管理、论坛管理、系统管理。用户&#xff1a;注册、个人中心、活动报名管理、目标制定管理、我的…

SonarLint安装与简介

简介&#xff1a; SonarLint 是SonarQube官方推出的可以在idea 静态扫描插件&#xff0c;可以同步sonarqube的规则&#xff0c;在开发编译的时候发现问题&#xff0c;可以有效减少在流水线扫描返工的次数 安装 idea 选择setttings &#xff0c;搜索sonarlint插件&#xff0c…

“第五十四天” 溢出判断,标志位 ,有问题

之前说过在运算的时候可能发生溢出&#xff0c;这种情况只会出现在 正正相加 &#xff0c;负负相加 的时候才会出现前者是上溢&#xff0c;正正加得负&#xff0c;后者是下溢&#xff0c;负负加得正。&#xff08;减法变成加法&#xff0c;再看&#xff09; 加减运算&溢出…

【Luckfox pico入门记录(二)】ubuntu22.04系统烧录

写在前面 最近在看智能手表的选型&#xff0c;但是作为一个小白的我&#xff0c;发现要么核心板太大了&#xff0c;不适合作为手表(大多数核心板的面积都在4*4以上&#xff0c;而且很少带有WIFI芯片&#xff0c;即使带有WIFI芯片也不是PCB天线而是那种立着的天线。而Luckfox因为…

考点之数据结构

概论 时间复杂度和空间复杂度是计算机科学中用来评估算法性能的重要指标。 时间复杂度&#xff1a; 时间复杂度衡量的是算法运行所需的时间。它表示算法执行所需的基本操作数量随着输入大小的增长而变化的趋势。 求法&#xff1a; 通常通过分析算法中基本操作执行的次数来…

简单方法搭建个人网站

随着互联网的发展&#xff0c;越来越多的人希望拥有一个属于自己的网站&#xff0c;用来展示自己的个人才华、推广自己的产品或服务。但是&#xff0c;很多人都因为没有编程知识而望而却步。现在&#xff0c;有一个简单的方法可以帮助你轻松搭建网站&#xff0c;无需编程知识。…

并发编程

什么是并发编程&#xff1f; 并行&#xff1a;在同一个时间节点上&#xff0c;多个线程同时执行(是真正意义上的同时执行) 并发&#xff1a;一个时间段内&#xff0c;多个线程依次执行。 并发编程&#xff1a;在例如买票、抢购、秒杀等等场景下&#xff0c;有大量的请求访问…

「常识」浮点数和定点数

浮点数和定点数 本篇文章旨在简短的介绍浮点数、定点数的定义&#xff0c;以及一些常见的数制、补码。 一、常识 如果缺少以下常识的话&#xff0c;将很难理解浮点数和定点数的概念。 1、数 自然数整数/分数小数&#xff1a;有限小数、无限循环小数、无限不循环小数实数&a…

独创改进 | RT-DETR 引入 Asymptotic Hybrid Encoder | 渐进混合特征解码结构

本专栏内容均为博主独家全网首发,未经授权,任何形式的复制、转载、洗稿或传播行为均属违法侵权行为,一经发现将采取法律手段维护合法权益。我们对所有未经授权传播行为保留追究责任的权利。请尊重原创,支持创作者的努力,共同维护网络知识产权。 文章目录 网络结构实验结果…

97. 交错字符串

题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 解题思路&#xff1a;动态规划。 如果s1.length()s2.length ! s3.length()&#xff0c;直接返回false&#xff0c;否则使用动态规划求解。定义状态&#xff1a;dp[i][i]&#xff…

在CPU上运行yolov5

https://blog.csdn.net/weixin_54721509/article/details/122983561 前提是安装好了 python和 opencv基本环境 &#xff0c;如果没按转可以参考&#xff1a;https://blog.csdn.net/yangshengwei230612/article/details/127606771 安装pytorch 进入pytorch官网 https://pytor…

No175.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…