Java编程

导航菜单



当前位置: 首页  /  Java基础  /  正文

使用SpringBoot和jxls根据Excel模板填写数据并导出

阅读:6

使用SpringBoot和jxls根据Excel模板填写数据并导出

项目结构

pom.xml


        <!--jxls导出依赖jar包-->
        <dependency>
            <groupId>net.sf.jxls</groupId>
            <artifactId>jxls-core</artifactId>
            <version>1.0.6</version>
            <scope>compile</scope>
        </dependency>

学生信息表模板:

ExcelUtiles

package cn.bdqn.utils;

import net.sf.jxls.transformer.XLSTransformer;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.util.ResourceUtils;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Map;

/**
 * @ProjectName: Student
 * @Author: huat
 * @Date: 2020/5/7 8:53
 * @Version: 1.0
 */
public class ExcelUtiles {
    /**
     * 输出表格
     * @param map 表格中数据
     * @param response 响应
     * @param excelName 表格名称
     * @param excelPath 表格模板保存的路径
     */
    public static void outExcel(Map<String,Object> map,HttpServletResponse response,String excelName,String excelPath){
        File file=null;
        try {
            file= ResourceUtils.getFile(excelPath);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        //配置下载路径
        String path = "/download/";
        createDir(new File(path));

        //根据模板生成新的excel
        File excelFile = createNewFile(map, file, path,excelName);

        //浏览器端下载文件
        try {
            downloadFile(response, excelFile,excelName);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        //删除服务器生成文件
        deleteFile(excelFile);

    }

    /**
     * 根据excel模板生成新的excel
     * @param beans 表格中的数据
     * @param file 文件
     * @param path 生成文件的位置
     * @param excelName 文件名称
     * @return
     */
    private static File createNewFile(Map<String, Object> beans, File file, String path,String excelName) {
        XLSTransformer transformer = new XLSTransformer();


        File newFile = new File(path + excelName+".xlsx");


        try (InputStream in = new BufferedInputStream(new FileInputStream(file));
             OutputStream out = new FileOutputStream(newFile)) {
            Workbook workbook = transformer.transformXLS(in, beans);
            workbook.write(out);
            out.flush();
            return newFile;
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return newFile;
    }

    /**
     * 将服务器新生成的excel从浏览器下载
     * @param response 响应
     * @param excelFile 表格文件
     * @param excelName 表格名称
     * @throws UnsupportedEncodingException
     */
    private static void downloadFile(HttpServletResponse response, File excelFile,String excelName) throws UnsupportedEncodingException {

        /* 设置文件头:最后一个参数是设置下载文件名 */
        response.setHeader("Content-type","application/vnd.ms-excel");
        // 解决导出文件名中文乱码
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-Disposition","attachment;filename="+new String(excelName.getBytes("UTF-8"),"ISO-8859-1")+".xlsx");

        try (
                InputStream ins = new FileInputStream(excelFile);
                OutputStream os = response.getOutputStream()
        ) {
            byte[] b = new byte[1024];
            int len;
            while ((len = ins.read(b)) > 0) {
                os.write(b, 0, len);
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }

    /**
     * 浏览器下载完成之后删除服务器生成的文件
     * 也可以设置定时任务去删除服务器文件
     *
     * @param excelFile
     */
    private static void deleteFile(File excelFile) {

        excelFile.delete();
    }

    //如果目录不存在创建目录 存在则不创建
    private static void createDir(File file) {
        if (!file.exists()) {
            file.mkdirs();
        }
    }
}

Controller

 @RequestMapping("downExcel")
    public void downExecl(HttpServletResponse response){
        Map<String,Object> map=new HashMap<String,Object>();
        map.put("name","学生信息表");
       //获取学生信息
        map.put("studentList",studentService.getStudent());
       //"classpath:static/excel/学生表格.xlsx"   表格模板保存路径,classpath:代表resources路径
        ExcelUtiles.outExcel(map,response,"学生信息表","classpath:static/excel/学生表格.xlsx");
    }

原文:https://my.oschina.net/u/3535099/blog/4268971

作者:冥焱

标签

springbootjxls根据Excel模板填写数据导出


相关文章列表

SpringBoot整合JXLS:轻松实现复杂excel报表导出

SpringBoot整合JXLS:轻松实现复杂excel报表导出

1、pom.xml中引入相关依赖<...


Java实战:使用POI和模板导出Excel文件,快速设置Sheet样式!

Java实战:使用POI和模板导出Excel文件,快速设置Sheet样式!

Apache POIPOI为【Poor Obfuscation Implementation】的首字母缩写,意为【可怜的模糊实现】。Java程序对Microsoft Office格式档案读和写的功能。...


使用 Spring Boot 实现向 Excel 模板写入数据并下载全过程

使用 Spring Boot 实现向 Excel 模板写入数据并下载全过程

之前用获取模板路径的方式测试没问题打包后就有问题了莫名出现一个! 找了很多教程尝试无果 最终使用下面这个方式无需获取file对象以及模板路径的方式进行写入下载(那个设置浏览器编码没有测试不知道能不能用...


Java实现数据导出为Excel表格- 一种高效且实用的方法

Java实现数据导出为Excel表格- 一种高效且实用的方法

之前写过Excel的导入与导出,但是缺少总结,现在总结一下。现在大多使用的是poi和jxl,关于二者的比较,可以百度,相较而言,还是poi好一点,需要用到的是poi,需要之前引入,如果是maven项目...


学习Java编程,轻松实现Excel数据导出功能

学习Java编程,轻松实现Excel数据导出功能

引言 Java是一种强大的编程语言,广泛应用于软件开发领域。其中,Java提供了许多库和工具,使得开发人员能够轻松地处理各种任务,包括Excel数据导出。本文将从头开始介绍如何学习Java编程,以及...


青锋SpringBoot开源项目-Excel导入导出案例详解

青锋SpringBoot开源项目-Excel导入导出案例详解

青锋已经开源了多个开源项目,关注青锋可以获得更多技术支持和资源。(新增)基于SpringCloud Alibaba Nacos+vue前端的微服务版本。基于springboot、layui的jsp后台...


友情链接