《技术分享》java导出数据xlsx表

场景:在有些系统里可以看见有导出功能,导出一些数据,这时候可以把数据查出来,封装在一个list集合里返回到controller,然后实现导出。
也就是说 service层以下的代码实现和正常查询一样,把你需要导出的数据查出来,然后返回。我们可以在controller层来写导出功能代码。

1.首先在pom文件里添加一个插件
一开始不知道要添加这个插件,结果写完代码报错,报一个IOP…Exception,具体什么异常忘记了,哈哈。现在来看这个插件

		  
                org.apache.maven.plugins
                2.6
                maven-resources-plugin
                
                    UTF-8
                    
                        xlsx
                    
                
            

2.来准备一个xlsx表格模板,放在静态资源resoucers下
当然这只是一种方法或者格式,还有其他表格类型,那样代码可能稍微有些不同
《技术分享》java导出数据xlsx表_第1张图片《技术分享》java导出数据xlsx表_第2张图片就这样 就可以了哈。
3.然后就需要去controller写一个接口。二话不说直接上代码

/**
    * @Description: 水质水量导出
     *@Param:
     * @return:
    * @Author: 毕
    * @Date: 2020/1/8 14:26
    */
    @ApiOperation(value = "水质水量导出",httpMethod="POST")
    @PostMapping("/queryWaterQuantityListExport")
    public void queryWaterQuantityListExport(
            @ApiParam(name = "", value = "条件筛选")  @RequestBody MonitorItemRelationDto monitorItemRelationDto){
		//这里是调用方法普通查询得到的一个对象集合(现在要把这个导出)
        List<MonitorItemRelationDto> monitorItemRelationDtos = waterQuantitysService.queryWaterQuantityList(monitorItemRelationDto);

		//这里是开始写导出的功能了,开始看这
        ServletOutputStream outputStream=null;
        try {
        	//输入流来获取刚才你建的那个表格
            InputStream inputStream = this.getClass().getResourceAsStream("/excel/WaterQuantitysExcel.xlsx");
            //这个XSSFWorkbook 注意,看一下自己的文件是不是.xlsx,是才对应XSSFWorkbook 
            XSSFWorkbook xls = new XSSFWorkbook(inputStream);
            //你文件里下边工作表页的名字
            XSSFSheet sheet = xls.getSheet("Sheet1");
            //导出行的样式
            XSSFCellStyle cellStyle = xls.createCellStyle();
            cellStyle.setBorderTop(BorderStyle.THIN);
            cellStyle.setBorderBottom(BorderStyle.THIN);
            cellStyle.setBorderLeft(BorderStyle.THIN);
            cellStyle.setBorderRight(BorderStyle.THIN);
            cellStyle.setAlignment(HorizontalAlignment.CENTER);
            cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
            int row = 2;
            //遍历需要导出的集合
            for (MonitorItemRelationDto waterQuantity : monitorItemRelationDtos) {
            	//开始循环每行,给每列注入值
                XSSFRow dataRow = sheet.createRow(row);
                XSSFCell serialNumber = dataRow.createCell(0);
                serialNumber.setCellValue(row);
                XSSFCell MonitorObjectName = dataRow.createCell(1);
                MonitorObjectName.setCellValue(waterQuantity.getMonitorObjectName());
                XSSFCell LocationTypeName = dataRow.createCell(2);
                LocationTypeName.setCellValue(waterQuantity.getLocationTypeName());
                XSSFCell MonitorType = dataRow.createCell(3);
                MonitorType.setCellValue(waterQuantity.getMonitorType());
                XSSFCell ScadaPointItemDicCode = dataRow.createCell(4);
                ScadaPointItemDicCode.setCellValue(waterQuantity.getScadaPointItemDicCode());
                XSSFCell Value = dataRow.createCell(5);
                Value.setCellValue(waterQuantity.getValue().toString());
                XSSFCell DesignLowerValue = dataRow.createCell(6);
                DesignLowerValue.setCellValue(waterQuantity.getDesignLowerValue().toString());
                XSSFCell DesignUpperValue = dataRow.createCell(7);
                DesignUpperValue.setCellValue(waterQuantity.getDesignUpperValue().toString());
                XSSFCell monitorTime = dataRow.createCell(8);
                monitorTime.setCellValue(DateUtil.DateFormat(waterQuantity.getMonitorTime()));
				//上面定义的样式
                serialNumber.setCellStyle(cellStyle);
                MonitorObjectName.setCellStyle(cellStyle);
                LocationTypeName.setCellStyle(cellStyle);
                MonitorType.setCellStyle(cellStyle);
                ScadaPointItemDicCode.setCellStyle(cellStyle);
                Value.setCellStyle(cellStyle);
                DesignLowerValue.setCellStyle(cellStyle);
                DesignUpperValue.setCellStyle(cellStyle);
                monitorTime.setCellStyle(cellStyle);
                row++;
            }

            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
            //SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
            String fileName = "水质水量监测"+simpleDateFormat.format(new Date());
            
            response.setContentType("application/vnd.ms-excel;charset=utf-8;fileName="+fileName+ ".xlsx");
            response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName + ".xlsx", "UTF-8"));
            outputStream = response.getOutputStream();
            xls.write(outputStream);
        }catch (Exception e){
            e.printStackTrace();
            //return new ResultMoudel("error", "创建Excel失败");
        }finally {
            try {
                outputStream.flush();
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
                //return new ResultMoudel("error", "IO流关闭异常");
            }
        }
    }

到这里就可以了,开始测试…
我这用了swagger注解,可以在swagger上测试一下,下载导出的表格
《技术分享》java导出数据xlsx表_第3张图片
文件名好像乱码了,尴尬,自己在看看吧,
《技术分享》java导出数据xlsx表_第4张图片哈哈哈哈哈,还算成功!!!

你可能感兴趣的:(Java导出功能,java)