使用JXLS+Excel模板制作灵活的excel导出

server/2024/11/15 6:18:20/

前期一直卡在模板的批注上,改了很多遍的模板批注最终才成功导入,记录下方便以后寻找。

话不多说直接上代码:

Report

java">package com.example.jxls.common;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Map;
import java.util.Map.Entry;import org.jxls.common.Context;
import org.jxls.util.JxlsHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class Report {private static final Logger logger = LoggerFactory.getLogger(Report.class);public void createDocument(OutputStream outStream, String templateName, Map<String, Object> data) {logger.debug("Start creation of document");String pathTemplateName = ("/reports/").concat(templateName).concat(".xls");try(InputStream input = this.getClass().getResourceAsStream(pathTemplateName)) {//1Context context = new Context();for (Entry<String, Object> element : data.entrySet()) { // 2context.putVar(element.getKey(), element.getValue());}
//			System.out.println("context = " + context);JxlsHelper.getInstance().processTemplate(input, outStream, context); // 3} catch (Exception exception) {logger.error("Fail to generate the document", exception);} finally {closeAndFlushOutput(outStream); // 4}}private void closeAndFlushOutput(OutputStream outStream) {try {outStream.flush();outStream.close();} catch (IOException exception) {logger.error("Fail to flush and close the output", exception);}}
}

 

CommonDao

 

java">package com.example.jxls.dao;import com.example.jxls.model.Client;
import com.github.javafaker.Faker;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;public class CommonDao {public List<Client> getAllClients() {List<Client> clients = new ArrayList<>();Faker faker = new Faker();for (int i = 0; i < 20; i++) {clients.add(new Client(faker.name().firstName(), faker.name().lastName(), faker.bool().bool(),"SSN",faker.idNumber().ssnValid(),BigDecimal.valueOf(faker.number().numberBetween(1, 100000))));}return clients;}
}

UserTask

java">package com.example.jxls.model;import lombok.Data;public class UserTask {//用户idprivate String id;//用户名称private String userName;//任务Idprivate String taskId;//插件idprivate String  plugId;//班级idprivate String  classId;public UserTask(String id, String userName, String taskId, String plugId, String classId) {this.id = id;this.userName = userName;this.taskId = taskId;this.plugId = plugId;this.classId = classId;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getTaskId() {return taskId;}public void setTaskId(String taskId) {this.taskId = taskId;}public String getPlugId() {return plugId;}public void setPlugId(String plugId) {this.plugId = plugId;}public String getClassId() {return classId;}public void setClassId(String classId) {this.classId = classId;}
}

CommonService

java">package com.example.jxls.service;import com.example.jxls.common.Report;
import com.example.jxls.dao.CommonDao;
import com.example.jxls.model.UserTask;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;public class CommonService {private CommonDao dao;public CommonService() {dao = new CommonDao();}private void createCommonClientReport(String templateName, String outputName) throws FileNotFoundException, ParseException {Report report = new Report();OutputStream outStream = new FileOutputStream(outputName);List<UserTask> employees = generateSampleEmployeeData();Map<String, Object> data = new HashMap<>();
//		data.put("createdAt", "2021-01-01");
//		data.put("clients", dao.getAllClients());data.put("employees", employees);data.put("nowdate", new Date());data.put("data2", "222222qwer");report.createDocument(outStream, templateName, data);}public static List<UserTask> generateSampleEmployeeData() throws ParseException {List<UserTask> employees = new ArrayList<UserTask>();SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MMM-dd", Locale.US);employees.add( new UserTask("2L", "1970-Jul-10", "1500L", "0.15", "1500L") );employees.add( new UserTask("3L", "1973-Apr-30", "2300L", "0.15","2300L") );employees.add( new UserTask("4L", "1975-Oct-05", "2500L", "0.15","2500L") );employees.add( new UserTask("5L", "1978-Jan-07", "1700L", "0.15","1700L") );employees.add( new UserTask("6L", "1969-May-30", "2800L", "0.15","2800L") );return employees;}public void createClientReport1() throws FileNotFoundException, ParseException {createCommonClientReport("clientsTemplate", "target/clients.xls");}public void createClientReport2() throws FileNotFoundException, ParseException {createCommonClientReport("2111", "target/clients3.xls");}//	public void createClientReportWithConditions() throws FileNotFoundException, ParseException {
//		createCommonClientReport("clientsMarkInactiveTemplate", "target/clientsMarkInactive.xls");
//	}
}

Application

java">package com.example.jxls;import com.example.jxls.service.CommonService;import java.io.FileNotFoundException;
import java.text.ParseException;public class Application {public static void main(String[] args) throws FileNotFoundException, ParseException {CommonService service = new CommonService();service.createClientReport2();//		service.createClientReportWithConditions();}}

demo1模板示例:

jx:area(lastCell=”D4“)

效果展示:


http://www.ppmy.cn/server/16756.html

相关文章

矿山自动驾驶技术点分析

自动驾驶多用于乘用车领域&#xff0c;目前矿山自动驾驶量产落地前景广阔&#xff0c;由于矿山工作环境差&#xff0c;污染严重&#xff0c;而且通常矿区面积大&#xff0c;工作任务单一&#xff0c;场景固定&#xff0c;是一个适合进行自动驾驶落地的场景。 矿山自动驾驶俗称智…

arm架构,django4.2.7适配达梦8数据库

【Python相关包版本信息】 Django 4.2.7 django-dmPython 3.1.7 dmPython 2.5.5 【达梦数据库版本】 DM Database Server 64 V8 DB Version: 0x7000c 适配过程中发现的问题如下&#xff1a; 错误一&#xff1a;d…

Django模型的属性与方法

本节介绍Django模型的属性和方法&#xff0c;以及如何重写之前定义的模型方法等内容。 3.5.1 模型属性 Django模型中最重要的属性就是Manager&#xff0c;它是Django模型和数据库查询操作之间的接口&#xff0c;并且被用作从数据库当中获取实例的途径。如果Django模型中没有…

面试高频:HTTPS 通信流程

更多大厂面试内容可见 -> http://11come.cn 面试高频&#xff1a;HTTPS 通信流程 HTTPS 的加密流程 接下来说一下 HTTPS 协议是如何进行通信的&#xff1a; HTTPS 通信使用的 对称加密 非对称加密 两者结合的算法 HTTPS 通信时&#xff0c;会先使用 非对称加密 让通信双…

DBeaver工具在无网络的情况下连接clickhouse方法

1、问题 1、安装DBeaver后&#xff0c;一般在生产环境下是没有网络的&#xff0c;这就存在一个问题&#xff0c;使用DBeaver去连接clickhouse服务时&#xff0c;是需要下载驱动的&#xff0c;但是没有网络&#xff0c;就不能下载驱动&#xff1b; 2、解决方法 1、首先是在有…

计算机网络和因特网

Internet: 主机/端系统&#xff08;end System / host&#xff09;&#xff1a; 硬件 操作系统 网络应用程序 通信链路&#xff1a; 光纤、网络电缆、无线电、卫星 传输效率&#xff1a;带宽&#xff08;bps&#xff09; 分组交换设备&#xff1a;转达分组 包括&#…

维护性岗位为什么要写周报

大概从数年前&#xff0c;我就在一线的编程岗位转到了维护性岗位&#xff0c;或者说也算是管理岗位。岗位转换有一个指标可以清晰界定工作性质的不同&#xff0c;那就是&#xff1a;在维护性岗位在表现成绩其实变得更加困难&#xff0c;尤其是千篇一律的工作下&#xff0c;在需…

Migrations

Entity Framework的Migrations工具是一个版本控制和数据库迁移的系统&#xff0c;它允许开发者以编程方式管理数据库模式的变更。 在使用Entity Framework时&#xff0c;开发者可以通过代码先行&#xff08;Code First&#xff09;的方式定义数据模型&#xff0c;然后使用Migr…