springBoot+jxls导出固定模板Excel_周高高の的博客-程序员宅基地

技术标签: java  jxls  http  springBoot  

springBoot+jxls导出固定模板Excel


模板:

在这里插入图片描述
模板放到指定目录(resources资源目录下)

导出数据:
在这里插入图片描述

代码如下(示例):

pom.xml

 <!--jxls导出依赖jar包-->
        <dependency>
            <groupId>net.sf.jxls</groupId>
            <artifactId>jxls-core</artifactId>
            <version>1.0.6</version>
            <scope>compile</scope>
        </dependency>
 <!--poi依赖jar包 使用3.17本版的包就对了相信我-->
		<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>

ExcelUtiles

package com.src.common.excel;



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
 * @Package: cn.utils
 */
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 = StaticUrl.getFileUrl()+"down\\";
        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+".xls");


        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")+".xls");

        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();
        }
    }
}

StaticUrl

package com.src.common.excel;

import org.springframework.util.ResourceUtils;

import java.io.FileNotFoundException;

/**
 * @ProjectName: ycbdqn
 * @Package: cn.utils 上传文件路径
 * @Author: huat
 * @Date: 2020/3/5 13:39
 * @Version: 1.0
 */
public class StaticUrl {
    

    public static String getFileUrl(){
    
        String   systemPath =null;
        try {
    
            systemPath = ResourceUtils.getURL("classpath:").getPath().replace("%20", " ").replace('/', '\\').substring(1);;

        /*//从路径字符串中取出工程路径

            systemPath=systemPath.substring(0,systemPath.lastIndexOf("Student"));*/
        } catch (FileNotFoundException e) {
    
            e.printStackTrace();
        }

        int result=systemPath.indexOf("\\");
        if(-1!=result){
    
            systemPath=systemPath.substring(result).replace("/","\\");

        }
        return systemPath+"static.excel\\"; //和模板resources下的文件名称一致
        // return "E:\IDEA\file\";
    }
}

Controller

@RequestMapping("downExcel")
    public void downExecl(){
    
        Map<String,Object> map=new HashMap<String,Object>();
        map.put("name","学生信息表");
        Student student=new Student(123,"张三");
        Student student1=new Student(124,"李四");
        Student student2=new Student(125,"王五");
        List<Student> list=new ArrayList<>();
        list.add(student);list.add(student1);list.add(student2);
        map.put("studentList",list);

        //获取学生信息
        //"classpath:static/excel/学生表格.xls"   表格模板保存路径,classpath:代表resources路径
        System.out.println(StaticUrl.getFileUrl()+"学生表格.xls");
        ExcelUtiles.outExcel(map,response,"学生信息", StaticUrl.getFileUrl()+"学生表格.xls");

    }

参考:https://my.oschina.net/u/3535099/blog/4268971

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhouxianglian1/article/details/120158159

智能推荐

python中文件最重要的功能是什么和接收数据_python面试题_weixin_39602108的博客-程序员宅基地

正文Python基础篇1:为什么学习Python家里有在这个IT圈子里面,也想让我接触这个圈子,然后给我建议学的Python,然后自己通过百度和向有学过Python的同学了解了Python,Python这门语言,入门比较简单,它简单易学,生态圈比较强大,涉及的地方比较多,特别是在人工智能,和数据分析这方面。在未来我觉得是往自动化,人工智能这方面发展的,所以学习了Python2:通过什么途径学习Py...

串口、COM口、TTL、RS-232的区别详解_You_Never_Come_Here的博客-程序员宅基地

1、串口、COM口是指的物理接口形式(硬件)。而TTL、RS-232、RS-485是指的电平标准(电信号)。  2、接设备的时候,一般只接GND RX TX。不会接Vcc或者+3.3v的电源线,避免与目标设备上的供电冲突。  3、PL2303、CP2102芯片是 USB 转 TTL串口 的芯片,用USB来扩展串口(TTL电平)。  4、MAX232芯片是 TTL电平与RS2

《Unity3D网络游戏实战》第2章_yxqq378287007的博客-程序员宅基地

《Unity3D网络游戏实战》第2章异步代码异步客户端异步代码Async.csusing System;using System.Threading;namespace Async { class MainClass { public static void Main (string[] args) { Timer timer = new Timer(Timeout, null, 2000, 0); Thread.Sleep(2000*2); Console.WriteL

安装系统_iefanrui的博客-程序员宅基地

第一步、准备工作    安装系统前要做一些准备工作,首先是制作你要安装的系统的系统镜像。制作系统镜像要先下载一个UltraISO软件。然后右键点击选择“以管理员的身份运行”(注意:必须这样做)。打开后点击左上角的“文件”-—“打开”,找到存放系统镜像的目录,选中系统镜像,然后点击“打开”。然后点击 “启动”—“开始硬盘录入”,然后选择一个U盘作为系统启动盘(注意:这个U盘必须足够大,一般16G的就...

pv3d 的 Camera3D练习_suzhou_boy1的博客-程序员宅基地

 http://www.sandy1219.com/3d/test2/testflabcamera.html  package{ import flab3d.FlabCamera3D; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.Stage

随便推点

MT6752 LTE这个器件是什么型号?_szx940213的博客-程序员宅基地

MT6752 LTE这个器件是什么型号?这原理图上也没有写明确。问题来源:一牛网论坛 答案链接:MT6572

阿里云轻量级服务器CentOS7.3系统连接问题(Putty,Xshell)_贾继康的博客-程序员宅基地

文章目录阿里云轻量级服务器CentOS7.3系统连接问题(Putty,Xshell)一、前言二、准备工作三、为何不能使用密码连接?四、解决之道五、相关链接:五、Xshell5相关设置阿里云轻量级服务器CentOS7.3系统连接问题(Putty,Xshell)一、前言&nbsp; &nbsp;&nbsp; &nbsp; 博主之前通过密钥的方式实现了与Putty的连接(可参考此链接如何连接),...

苹果iPhone如何区分港版、国行、水货_weixin_33777877的博客-程序员宅基地

要想分辨所购买的苹果产品[iPhone 4、iPod Touch、iPad 2、iMac、MacBook及iPhone 4S]是大陆行货、水货、港货还是其它,其实很简单。今天来教大家如何区分。大陆行货、水货、港货还是其它XX货,其实就是它们的发行地不同,功能都是一样的。首先,要让大家了解,何谓为发行地的不同。发行地是说苹果产品所发行的国家或地区的不同,ZP为在香港发行的,LL为在美国发行的,CH为...

SD省队集训2019Day8之“有没有空”_weixin_30917213的博客-程序员宅基地

有没有空(busy)([Ynoi2018]天降之物)给你一个长为 n 的序列 a你需要实现 m 个操作,操作有两种:1.把序列中所有值为 x 的数的值变成 y2.找出一个位置 i 满足 ai==x,找出一个位置 j 满足 aj==y,使得|i-j|最小,并输出|i-j|部分分:二分考虑把整个区间分成两部分,那么这两个数要么都在左边,要么都在右边,要么一左一右。前两种情况可以递归解决,同...

关于PAT配置_赵文超z的博客-程序员宅基地

PAT配置 问题 在R1通过PAT配置实现企业内网192.168.0.0/24复用f0/1端口 方案网络拓扑如图-3所示:图-3 步骤实现此案例需要按照如下步骤进行。步骤一:基于端口的PAT配置限制1)删除动态NAT配置tarena-R1(config)#no ip nat inside source list 1tarena-R1(config)#no ip n...

推荐文章

热门文章

相关标签