• Excel文件上传,解析,下载(三 创建文件和文件下载)


    实现文件下载的功能

    1.Workbook workBookSpare = spareFlowService.getExcelFile(context, header);获得文件

    2.out = response.getOutputStream();获得输出流

    3.workBookSpare.write(out);将文件写出到输出流当中

    4.设置请求的头部信息

    1 response.setCharacterEncoding("utf-8");

    2 response.setContentType("multipart/form-data");

    3 response.setHeader("Content-Disposition", "attachment;fileName=" 4 + fileName); 

    4.1设置编码格式

    4.2设置成文件传输模式

    4.3设置下载的附件

    5.最后别忘记关闭流

     1     @RequestMapping(params = "method=fileExport")
     2     public void fileExport(@RequestParam("header") String header,
     3             @RequestParam("context") String context,
     4             HttpServletResponse response) {
     5         Date date = new Date();
     6         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
     7         String str = sdf.format(date);
     8         String fileName = str+".xls";
     9         response.setCharacterEncoding("utf-8");
    10         response.setContentType("multipart/form-data");
    11         response.setHeader("Content-Disposition", "attachment;fileName="
    12                 + fileName);
    13         Workbook workBookSpare = spareFlowService.getExcelFile(context, header);
    14         OutputStream out = null;
    15         try {
    16             out = response.getOutputStream();
    17             workBookSpare.write(out);
    18             out.flush();
    19             out.close();
    20         } catch (FileNotFoundException e) {
    21             logger.debug(e.getMessage());
    22         } catch (IOException e) {
    23             logger.debug(e.getMessage());
    24         }
    25     }

     创建文件,里面使用的是面向接口的编程方式。详情,关注注释即可。

    public Workbook createExcelFile(List<ResProperties> resProperties,
                List<List<String>> content) {
            // 创建显示的头部
            Workbook work = new HSSFWorkbook();
            Sheet sheet = work.createSheet();
            //第一行 表示的是列头
            createHeader(resProperties, sheet);
            //第二行 对应的列头在数据库当中的ID
            createHeaderIdHider(resProperties, sheet);
            createContent(content, sheet);
            return work;
            // 遍历显示的内容
        }
    private Row createHeader(List<ResProperties> resProperties,Sheet sheet){
            Row rowHeaderExcel = sheet.createRow(SpareTransaction.HEADER_EXCEL);
            for(int i=0;i<resProperties.size();i++){
                //前面空出一列 用来表示ID
                Cell cellHeader = rowHeaderExcel.createCell(i+1);
                cellHeader.setCellValue(resProperties.get(i).getFieldDescription());
            }
            return rowHeaderExcel;
        }
    private Row createHeaderIdHider(List<ResProperties> resProperties,Sheet sheet){
            Row rowHeaderExcel = sheet.createRow(SpareTransaction.HIDEER_ID_EXCEL);
            //隐藏
            rowHeaderExcel.setZeroHeight(true);
            for(int i=0;i<resProperties.size();i++){
                //前面空出一列 用来表示ID
                Cell cellHeader = rowHeaderExcel.createCell(i+1);
                cellHeader.setCellValue(resProperties.get(i).getPropertyId());
            }
            return rowHeaderExcel;
        }
    private void createContent(List<List<String>> content, Sheet sheet) {
            for (int i = 0; i < content.size(); i++) {
                List<String> row = content.get(i);
                Row rowExcel = sheet
                        .createRow(i + SpareTransaction.HIDEER_ID_EXCEL+1);
                for (int k = 0; k < row.size(); k++) {
                    Cell cell = rowExcel.createCell(k);
                    cell.setCellValue(row.get(k));
                }
            }
        }
  • 相关阅读:
    IE6-IE11兼容性问题列表及解决办法
    EJB--事务管理 .
    JDBC批处理---(java 对数据库的回滚) .
    redisb并发访问慢出现的问题
    redis其他问题
    多线程实现服务器端接收连接
    序列化作用
    redis的key过期时间
    nginx负载均衡和反向代理有什么区别
    nginx的负载均衡和反响代理配置
  • 原文地址:https://www.cnblogs.com/binarysheep/p/5238135.html
Copyright © 2020-2023  润新知