Java 基于POI实现根据 Excel模板填充数据并导出Excel

【本案例基于spring boot架构】

一、需求介绍

    给定一个Excel模板,在指定位置插入数据,然后将生成的excel导出。

二、实现方法介绍

    1、准备Excel模板

     模板中要插入数据的地方用“${...}"代替(其实就是占位符,与mybatis的sql语法占位符一样),

Java 基于POI实现根据 Excel模板填充数据并导出Excel_第1张图片

2、代码实现(可移植)

本案例用到的jar包依赖如下:



     net.sf.jxls
     jxls-core
     1.0.3

/**
     * 根据Excel模板导出Excel
     *
     * @param data:要放入Excel模板中的数据
     * @param response
     * @Param fileName:下载 的文件名(不带后缀)
     * @Param templete:模板名(带后缀)
     */
public static void exportExcelFromTemplete(String templeteName, String fileName, Map data, HttpServletResponse response) {

        String dir = System.getProperty("user.dir");
        String excelTempletePath = dir + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator + "templates";

        response.reset();
        //设置下载文档格式
        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
        response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xlsx");

        try {
            //创建临时导出文件
            File tempFile = File.createTempFile(fileName, ".xlsx");

            /**
             * 利用XLSTransform转到Excel
             */
            XLSTransformer transformer = new XLSTransformer();
            /**
             * templete:模板文件
             * tempFile.getAbsolutePath():临时文件的绝对地址
             */
            String templete = excelTempletePath + File.separator + templeteName;
            //开始转换到Excel,并写入数据(写入数据的核心代码)
            transformer.transformXLS(templete, data, tempFile.getAbsolutePath());

            BufferedOutputStream outputStream = null;
            BufferedInputStream inputStream = null;

            inputStream = new BufferedInputStream(new FileInputStream(tempFile));
            outputStream = new BufferedOutputStream(response.getOutputStream());
            byte[] buffer = new byte[inputStream.available() + 1024];
            int len = 0;
            while ((len = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, len);
            }

            outputStream.close();
            inputStream.close();
            /**
             * 下载完成删除临时文件
             */
            tempFile.delete();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        }

    }

说明:Map中的数据,其键(key)要和Excel表中要插入的数据${*}中的*一一对应。

如: 当像map中插入这条数据后,调用上面的方法,就可以生成自己需要的Excel。

本案例生成的Excel如下图所示:

Java 基于POI实现根据 Excel模板填充数据并导出Excel_第2张图片

ps:以上代码可以直接拷贝使用,只是要注意依赖包的导入不要忘记,如有报错,欢迎交流。

你可能感兴趣的:(Java,Spring,boot,Excel,模板导出,spring,boot,java,excel)