前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot+jxls 根据Excel模板 填写数据并导出

springboot+jxls 根据Excel模板 填写数据并导出

作者头像
用户5899361
发布2020-12-07 15:36:40
2K0
发布2020-12-07 15:36:40
举报
文章被收录于专栏:学习java的小白
项目结构
pom.xml
代码语言:javascript
复制
        <!--jxls导出依赖jar包-->
        <dependency>
            <groupId>net.sf.jxls</groupId>
            <artifactId>jxls-core</artifactId>
            <version>1.0.6</version>
            <scope>compile</scope>
        </dependency>
学生信息表模板:
ExcelUtiles
代码语言:javascript
复制
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
 * @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 = 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+".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
代码语言:javascript
复制
 @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,"学生信息表",StaticUrl.getFileUrl()+"学生信息表.xlsx");
    }
StaticUrl
代码语言:javascript
复制
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+"file\";
       // return "E:\IDEA\file\";
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目结构
  • pom.xml
  • 学生信息表模板:
  • ExcelUtiles
  • Controller
  • StaticUrl
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档