java后台实现excel文件下载功能

   java中对于excel文件的操作,有读取,写入,上传等功能,在对excel文件进行操作时,为了让使用者更加直观的制作excel数据,必然会有下载模板excel文件功能,这里以学生基本信息模板excel文件为例,实现对指定路径下的excel文件进行下载的后台代码。
  对excel文件的操作使用到poi接口,对于不同拓展名的excel文件调用不同的对象,maven导入jar包语句可以参考poi导入jar包
  我们在这里操作的对象是.xlsx格式的excel文件。代码如下:
 /**
     * 学生excel模板下载,可用于批量新建,修改学生对象,
     *
     * @param response
     * @param request
     * @return
     */
    @RequestMapping(value = "downLoadStuInfoExcel", produces = "text/html;charset=UTF-8")
    public void downLoadStuInfoExcel(HttpServletResponse response, HttpServletRequest request) {
        JSONObject rt = new JSONObject();
        //json对象,用来记录下载状态值,写入log中,也可以把状态值返回到前台,这一部分可有可无。
        rt.put("status", "1");
        rt.put("message", "");
        rt.put("result", "");
        //学生新建excel下载模板保存地址从配置文件中读取
        String folderPath = ResourceBundle.getBundle("systemconfig").getString("stuExcelDownLoadPath") + File.separator + "stuTemplateExcel.xlsx";
        File excelFile = new File(folderPath);
        //判断模板文件是否存在
        if (!excelFile.exists() || !excelFile.isFile()) {
            rt.put("status", "0");
            rt.put("message", "模板文件不存在");

            //  return rt.toJSONString();
        }
        //文件输入流
        FileInputStream fis = null;
        XSSFWorkbook wb = null;
        //使用XSSFWorkbook对象读取excel文件
        try {
            fis = new FileInputStream(excelFile);
            wb = new XSSFWorkbook(fis);
            fis.close();
        } catch (Exception e) {
            e.printStackTrace();
            rt.put("status", "0");
            rt.put("message", "模板文件读取失败");
            // return rt.toJSONString();
        }
        //设置contentType为vnd.ms-excel
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setCharacterEncoding("utf-8");

        // 对文件名进行处理。防止文件名乱码,这里前台直接定义了模板文件名,所以就不再次定义了
        //String fileName = CharEncodingEdit.processFileName(request, "stuTemplateExcel.xlsx");
        // Content-disposition属性设置成以附件方式进行下载
        response.setHeader("Content-disposition", "attachment;filename=stuTemplateExcel.xlsx");
        //调取response对象中的OutputStream对象
        OutputStream os = null;
        try {
            os = response.getOutputStream();
            wb.write(os);
            os.flush();
            os.close();
        } catch (IOException e) {
            e.printStackTrace();
            rt.put("status", "0");
            rt.put("message", "模板文件下载失败");
        }
        logger.info("下载学生模板文件结果:" + rt.toJSONString());
        //return rt.toJSONString();
    }

 

 

注意事项:

  1. 对excel文件读取使用了FileInputStream对象,然后生成新的XSSFWorkbook对象
  2. 在文件的读取和写入的动作完成后,把对应的流关闭

 

  下载得到的excel模板文件:

 

  以上就是对Java中下载excel文件后台处理的总结归纳。欢迎一起探讨更加高效的解决方案

 

 

 

posted @ 2018-11-11 15:41  obonika  阅读(23597)  评论(1编辑  收藏  举报