Java使用EasyExcel和hutool 完成Excel簡單的導入導出


<!--        hutool工具包-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.1.0</version>
        </dependency>
<!--        EasyExcel依懶-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.5</version>
        </dependency>
    /**
     * 任務導入    使用hutool工具類導入Excel文件
     * @return
     */
    @PostMapping("/import")
    @ApiOperation("用戶任務-任務導入")
    public Result fileUpload(
            @RequestParam("file") MultipartFile file
    ) {
        try {
            //使用hutool工具類導入Excel文件
            ExcelReader reader = ExcelUtil.getReader(file.getInputStream());
            //讀取excel中的數據,與User實體類一一對應
            List<User> listData = reader.readAll(User.class);
            //批量存入數據庫中 
            //userTaskService.saveImportTask(listData);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new Result<>();
    }

    /**
     * 統計導出 文件下載
     *
     * @return
     */
    @GetMapping(value = "/export")
    @ApiOperation(value = "統計導出")
    public void statisticsExport(
            @ApiParam(name = "province", value = "省")
            @RequestParam("province") String province,
            @ApiParam(name = "city", value = "市")
            @RequestParam("city") String city,
            @ApiParam(name = "counter", value = "區")
            @RequestParam("counter") String counter,
            @ApiParam(name = "startTime", value = "開始時間")
            @RequestParam("startTime") Long startTime,
            @ApiParam(name = "endTime", value = "結束時間")
            @RequestParam("endTime") Long endTime,
            @ApiParam(name = "orderByType", value = "排序類型 ASC 升序 DESC 倒序 默認倒序")
            @RequestParam("orderByType") String orderByType,
            HttpServletResponse response) {
        try {
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("utf-8");
            String fileName = URLEncoder.encode("統計", "UTF-8");
            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
            FastDateFormat fastDateFormat = FastDateFormat.getInstance(DatePattern.NORM_DATETIME_PATTERN, TimeZone.getTimeZone("Asia/Shanghai"));
            String startTimeStr = fastDateFormat.format(DateUtil.beginOfDay(new DateTime(startTime, TimeZone.getTimeZone("Asia/Shanghai"))));
            String endTimeStr = fastDateFormat.format(DateUtil.endOfDay(new DateTime(endTime, TimeZone.getTimeZone("Asia/Shanghai"))));
            //  DemoDTO 查詢條件入參
            DemoDto dto= new DemoDto();
            dto.setProvince(province);
            dto.setCity(city);
            dto.setCounter(counter);
            dto.setStartTime(startTimeStr);
            dto.setEndTime(endTimeStr);
            dto.setOrderByType(orderByType);
            //根據查詢條件查詢數據庫---把需要導出的數據放到list中
            List<DemoVO> list = task.findStatisByParams(DemoDto);
            // 這里需要設置不關閉流
            String dateTitle = "時間段:" + fastDateFormat.format(new DateTime(startTime,TimeZone.getTimeZone("Asia/Shanghai"))) + "至" + DateUtil.formatDate(new DateTime(endTime, TimeZone.getTimeZone("Asia/Shanghai")));
            String rangeTitle = "范圍:" +
                    (StrUtil.isBlank(province) ? "全部" : province) + "/" +
                    (StrUtil.isBlank(city) ? "全部" : city) + "/" +
                    (StrUtil.isBlank(counter) ? "全部" : counter);
            EasyExcel.write(response.getOutputStream(), ClientDetailStatisVO.class)
                    .head(ClientDetailStatisVO.head(dateTitle, rangeTitle))
                    .autoCloseStream(Boolean.FALSE).sheet("統計")
                    //上面從數據庫查出來的數據
                    .doWrite(statisByParams);
        } catch (Exception e) {
            // 重置response
            response.reset();
            throw new CustomException(Result.Status.INVALID_PARAM);

        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM