利用JXLS实现模板导出

1、需要的依赖:

<dependency>
   <groupId>net.sf.jxls</groupId>
   <artifactId>jxls-core</artifactId>
   <version>1.0.6</version>
   <scope>compile</scope>
</dependency>

2、工具类:

public class ExcelUtils {

    public static File createFile(Map<String,Object> beans,String name, File file, String path){
        XLSTransformer transformer=new XLSTransformer();
        File  newFile =new File(path+name);
        try {
            InputStream inputStram = new BufferedInputStream(new FileInputStream(file));
            OutputStream outputStream = new FileOutputStream(newFile);
            Workbook workbook = transformer.transformXLS(inputStram, beans);
            workbook.write(outputStream);
            outputStream.flush();
            return newFile;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return newFile;
    }


    public static void downloadFile(HttpServletResponse response,File excelFile) throws UnsupportedEncodingException {
         /* 设置文件ContentType类型,这样设置,会自动判断下载文件类型 */
        response.setContentType("application/myexcel");
        /* 设置文件头:最后一个参数是设置下载文件名 */
        //response.setHeader("Content-Disposition", "attachment;filename=" + excelFile.getName());
        response.setHeader("Content-disposition","attachment; filename="+new String(excelFile.getName().getBytes("GB2312"),"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
     */
    public static void deleteFile(File excelFile) {

        excelFile.delete();
    }

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

3、测试:

/**
 * excel导出
 * 1.获取数据集List 插入到map集合中
 * 2.根据模板生成新的excel
 * 3.将新生成的excel文件从浏览器输出
 * 4.删除新生成的模板文件
 */
 @RequestMapping(value = "/export",method = RequestMethod.GET)
    private void excel(HttpServletResponse response) throws UnsupportedEncodingException {
        List<User> userList =new ArrayList<>();
        userList.add(new User("1","张三","18","男"));
        userList.add(new User("2","李四","19","女"));
        userList.add(new User("3","王五","20","男"));
        Map<String,Object> beans =new HashMap<>();
        beans.put("list",userList);
        File file=null;
        try {
             file = ResourceUtils.getFile("classpath:excel/用户信息.xlsx");
        } catch (FileNotFoundException e) {
           logger.info("模板路径未找到!");
        }
        String path="/";
        String name="用户信息";
        //根据模板生成新的Excel
        File excelFile = ExcelUtils.createFile(beans,name, file, path);
        //浏览器端下载文件
        ExcelUtils.downloadFile(response,excelFile);
        //删除该服务器生成文件
        ExcelUtils.deleteFile(excelFile);

    }

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jxls是一个开源的Java工具,可以根据Excel模板文件生成Excel文件。jxls支持复杂的Excel模板,可以在模板中包含多个工作表、多个单元格样式、公式等。 下面是使用jxls导出Excel的步骤: 1. 创建Excel模板文件,可以使用Excel或者其他电子表格软件创建,也可以使用jxls提供的Excel模板文件样例。 2. 在Java代码中使用jxls API读取Excel模板文件,并将要填充到Excel文件中的数据传递给jxls。 3. 在Excel模板文件中,使用jxls提供的标记语言标记待填充的单元格或区域。 4. 使用jxls API将填充好数据的Excel文件输出到指定位置。 下面是一个简单的示例: 1. 创建Excel模板文件,假设文件名为template.xlsx,包含两个工作表Sheet1和Sheet2,每个工作表中包含一个表格,表格中包含两个单元格A1和B1,A1单元格中填充姓名,B1单元格中填充年龄。 2. 在Java代码中,使用jxls API读取Excel模板文件,准备要填充到Excel文件中的数据: ```java InputStream is = new FileInputStream(new File("template.xlsx")); OutputStream os = new FileOutputStream(new File("output.xlsx")); Map<String, Object> model = new HashMap<String, Object>(); List<Person> persons = new ArrayList<Person>(); persons.add(new Person("Alice", 25)); persons.add(new Person("Bob", 30)); model.put("persons", persons); ``` 3. 在Excel模板文件中,使用jxls提供的标记语言标记待填充的单元格或区域。在A1单元格中插入${person.name},在B1单元格中插入${person.age},表示在Excel文件中填充persons集合中的每个Person对象的name和age属性。 4. 使用jxls API将填充好数据的Excel文件输出到指定位置: ```java XLSTransformer transformer = new XLSTransformer(); Workbook workbook = transformer.transformXLS(is, model); workbook.write(os); os.flush(); os.close(); is.close(); ``` 这样,就可以根据复杂模板导出Excel文件了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值