Java poi 导出Excel并下载到客户端

Maven配置,包含了其他文件格式的依赖,就全贴出来了

<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-excelant</artifactId>
            <version>3.12</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>3.12</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.8</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>3.8</version>
        </dependency>

Service层

@Override
    public void export(Long sblsh, String excelName, OutputStream out) {
        try {
            // 第一步,创建一个webbook,对应一个Excel文件  
            HSSFWorkbook wb = new HSSFWorkbook();
            //生成一个表格  
            HSSFSheet sheet = wb.createSheet(excelName); 
            // 第三步,在sheet中添加表头第0行
            HSSFRow row = sheet.createRow(0);
            
            // 第四步,创建单元格,并设置值表头 设置表头居中  
            HSSFCellStyle style = wb.createCellStyle();  
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
            HSSFCell cell = row.createCell(0);
            cell.setCellStyle(style);
            
            Byte kjzz = qyjbxxMapper.getKjzz(sblsh);
            List<A> record = this.selectBySblsh(sblsh);
                this.insertData(wb, sheet, row, record, out);
            }
        } catch (Exception e) {
            logger.info(e.getMessage());
        }
    }
    
    /**
     * 导入数据到表格中
     * @param wb execl文件
     * @param sheet 表格
     * @param row 表格行
     * @param record 要导出的数据
     * @param out 输出流
     */
    private void insertData(HSSFWorkbook wb,HSSFSheet sheet,HSSFRow row,List<A> record,
            OutputStream out){
        try {
            row = sheet.createRow(1);
            for(int i=0;i<title.length;i++){
                row.createCell(i).setCellValue(title[i]);
            }
            for(int i=0;i<record.size();i++){
                row = sheet.createRow(i+2);
                A data = record.get(i);
                row.createCell(0).setCellValue(data.getHc());
                row.createCell(1).setCellValue(data.getXm());
                BigDecimal je = data.getJe();
                if(je!=null){
                    row.createCell(2).setCellValue(je.doubleValue());
                }
            }
            //合并单元格,前面2位代表开头结尾行,后面2位代表开头结尾列
            CellRangeAddress region = new CellRangeAddress(0,0,0,title.length-1);
            sheet.addMergedRegion(region);
            wb.write(out);
            out.flush();
            out.close();
            wb.close();
        } catch (Exception e) {
            logger.info(e.getMessage());
        }
    }

Controller

@RequestMapping("/export")
    public void export(Long sblsh, HttpServletRequest request, HttpServletResponse response){
        response.setContentType("octets/stream");
        String excelName = "文件名";
        try {
            response.addHeader("Content-Disposition", "attachment;filename="+new String(excelName.getBytes("gb2312"), "ISO8859-1" )+".xls");
            OutputStream out = response.getOutputStream();
            aService.export(sblsh,excelName ,out);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

posted @ 2017-09-14 10:26  紫薇帝星的故事  阅读(4723)  评论(0编辑  收藏  举报