将数据导出到 excel ,然后下载下来

/**
     * 根据学生工号导出该学生的培养计划
     * @param response
     * @param trainingName
     * @return
     */
    @RequestMapping("/exportTrainingPlanMessageToExcel.do_")
    @ResponseBody
    public void exportTrainingPlanMessageToExcel(HttpServletResponse response, @RequestParam("trainingName") String trainingName) {
        //文件的默认保存名
        String fileName = "exportTrainingPlanMessageToExcel.xls";

        List<List<Object>> paramList = trainingPlanService.getParamList(trainingName);

        ExportEmployeeMessageToExcel.exportDataToExcel(fileName, response, paramList);
    }
@Override
    public List<List<Object>> getParamList(String trainingName) {
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("trainingName", trainingName);

        List<List<Object>> resultList = new ArrayList<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        List<TrainingPlan> dataList = trainingPlanDao.getTrainingPlanByTrainingName(paramMap);

        //添加excel文件表头
        List<Object> headList = new ArrayList<>();
        headList.add("学生的工号");
        headList.add("学生姓名");
        headList.add("培养项目");
        headList.add("培养阶段");
        headList.add("轮岗岗位");
        headList.add("建议时长");
        headList.add("培养目标");
        headList.add("导师工号");
        headList.add("导师姓名");
        headList.add("培养计划表单id");
        headList.add("创建时间");
        headList.add("知识技能");
        headList.add("业绩或任务要求");
        headList.add("理论考核分数");
        headList.add("成绩是否可见");
        headList.add("是否通过");

        resultList.add(headList);

        //添加excel文件数据
        for (TrainingPlan trainingPlan : dataList) {
            List<Object> list = new ArrayList<>();
            list.add(trainingPlan.getStudentId());
            list.add(trainingPlan.getStudentName());
            list.add(trainingPlan.getTrainingName());
            list.add(trainingPlan.getTrainingStage());
            list.add(trainingPlan.getRotationPost());
            list.add(trainingPlan.getDuration());
            list.add(trainingPlan.getTarget());
            list.add(trainingPlan.getMentorId());
            list.add(trainingPlan.getMentorName());
            list.add(trainingPlan.getPlanFormId());
            list.add(sdf.format(trainingPlan.getCreateTime()));
            list.add(trainingPlan.getKnowledgeSkills());
            list.add(trainingPlan.getRequirements());
            list.add(trainingPlan.getAssessmentScore());
            list.add(trainingPlan.getScoreVisible());
            list.add(trainingPlan.getIsPass());

            resultList.add(list);
        }
        return resultList;
    }
public class ExportEmployeeMessageToExcel {

    private static final String SHEET_NAME = "员工信息表";

    private static final Logger log = LoggerFactory.getLogger(ExportEmployeeMessageToExcel.class);

    /**
     * 批量将数据导入到excel中
     * @param fileName 生成文件的名字
     * @param response
     * @param paramList
     * @return
     */
    public static void exportDataToExcel(String fileName, HttpServletResponse response, List<List<Object>> paramList){
        /**
         * 以下为生成Excel操作
         */
        // 1.创建一个workbook,对应一个Excel文件
        HSSFWorkbook wb = new HSSFWorkbook();
        // 2.在workbook中添加一个sheet,对应Excel中的一个sheet
        HSSFSheet sheet = wb.createSheet(SHEET_NAME);
        // 3.在sheet中添加表头第0行,老版本poi对excel行数列数有限制short
        HSSFRow row = sheet.createRow(0);

        /*// 设置表头
        HSSFCell cell = row.createCell(0);
        cell.setCellValue("表头1");
        cell.setCellStyle(style);

        cell = row.createCell(1);
        cell.setCellValue("表头2");
        cell.setCellStyle(style);

        cell = row.createCell(2);
        cell.setCellValue("表头3");
        cell.setCellStyle(style);

        cell = row.createCell(3);
        cell.setCellValue("表头4");
        cell.setCellStyle(style);

        cell = row.createCell(4);
        cell.setCellValue("表头5");
        cell.setCellStyle(style);*/

        // 循环将数据写入Excel,包括表头
        for (int i = 0; i < paramList.size(); i++) {
            row = sheet.createRow((int) i);
            List list= paramList.get(i);
            // 创建单元格,设置值
            for (int j = 0; j < list.size(); j++) {
                row.createCell(j).setCellValue(String.valueOf(list.get(j)));
            }
        }

        downloadExcel(wb, response, fileName);

    }

    /**
     * 将导好数据的excel文件下载下来,并打开下载页面
     * @param fileName 生成文件的名字
     * @param response
     * @return
     */
    public static void downloadExcel(HSSFWorkbook wb, HttpServletResponse response, String fileName){
        try {
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            wb.write(os);
            byte[] content = os.toByteArray();
            InputStream is = new ByteArrayInputStream(content);
            // 设置response参数,可以打开下载页面
            response.reset();
            response.setContentType("application/octet-stream; charset=UTF-8");
            response.setHeader("Content-Disposition", "attachment; filename=" + new String(fileName.getBytes(),"ISO8859-1"));
            ServletOutputStream out = response.getOutputStream();
            BufferedInputStream bis = null;
            BufferedOutputStream bos = null;

            try {
                bis = new BufferedInputStream(is);
                bos = new BufferedOutputStream(out);
                byte[] buff = new byte[1024];
                int bytesRead;
                // Simple read/write loop.
                while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                    bos.write(buff, 0, bytesRead);
                }
            } catch (Exception e) {
                log.error("异常情况为:" + e.getMessage());
            } finally {
                if (wb != null) {
                    wb.close();
                }
                if (bis != null) {
                    bis.close();
                }
                if (bos != null) {
                    bos.close();
                }
            }
        } catch (IOException e) {
            log.error("异常情况为:" + e.getMessage());
        }
    }
}

 POM:

<!-- poi,excel解析xls格式 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.17</version>
</dependency>
<!-- poi-ooxml,excel解析xlsx格式 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.17</version>
</dependency>
<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
</dependency>

<!--excel文件不需要转码成二进制-->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.0.2</version>
    <configuration>
        <encoding>UTF-8</encoding>
        <nonFilteredFileExtensions>
            <nonFilteredFileExtension>xls</nonFilteredFileExtension>
            <nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
        </nonFilteredFileExtensions>
    </configuration>
</plugin>

猜你喜欢

转载自www.cnblogs.com/liuqing576598117/p/10857196.html