XSSFWorkbook實現導出excel


1.pom.xml中加入poi依賴:

  <!-- poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.10-FINAL</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.10-FINAL</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>3.10-FINAL</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>

2.創建導出excel文件模板;

導出模板

 

 

 

 

 

 

 

 

3.controller層實現代碼:

 @PostMapping("/excelCarrierOrder")
    public ResponseEntity<Resource> excelCarrierOrder(@RequestBody Map<String,Object> params,HttpServletResponse response) throws IOException{

    //列表數據
         XSSFWorkbook workbook = carrierOrderService.excelCarrierOrder(params);
         ByteArrayOutputStream os = new ByteArrayOutputStream();
         workbook.write(os);
         response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
         response.setHeader("Pragma", "no-cache");
         response.setHeader("Expires", "0");
         response.setHeader("charset", "utf-8");
         // 當前日期,用於導出文件名稱
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
         String name =sdf.format(new Date()) + ".xlsx";
         response.setHeader("Content-Disposition", "attachment;filename=\"" + URLEncoder.encode(name, "UTF-8") + "\"");
         workbook.write(response.getOutputStream());
         if (null != os) {
             os.close();
         }
         return new ResponseEntity<Resource>(null, null, HttpStatus.OK);
    }

4.service實現類實現代碼:

    @Override
    public XSSFWorkbook excelCarrierOrder(Map<String, Object> params) throws IOException {

   //模板路徑
        String path = "/templates/excel/訂單列表.xlsx";
        XSSFWorkbook workboot = new XSSFWorkbook(this.getClass().getResourceAsStream(path));
        //sheet頁(默認sheet1頁),也可通過workboot.createSheet("訂單列表")創建sheet頁
        XSSFSheet sheetAt = workboot.getSheetAt(0);
        //訂單基本表數據
        List<CarrierOrderPojo> list = mapper.getExcelCarrierOrder(params);

   //開始創建行和表格並且加入數據
        //行
        XSSFRow row;
        int i = 0;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
        if(null != list && !list.isEmpty()) {
            for (CarrierOrderPojo dto : list) {
                //根據訂單id查詢車輛信息
                List<CarrierOrderTruck> truckList = truckMapper.getTruckList(dto.getId());
                //根據訂單id查詢裝卸車費用
                List<CarrierOrderServe> serveList = serveMapper.getServeList(dto.getId());
                //根據訂單id查詢采購詳情
                List<CarrierOrderDetail> detailList = detailMapper.getCarrierOrderDetailList(dto.getId());
                String purchaseOrderNumber = "";
                i += 1;
                //創建行
                row = sheetAt.createRow(i);
                //承運商
                if(null != dto.getCarrierName()) {
                    row.createCell(0).setCellValue(dto.getCarrierName());
                }else {
                    row.createCell(0).setCellValue("");
                }
                //物流單號
                if(null != dto.getLogisticsNumber()) {
                    row.createCell(1).setCellValue(dto.getLogisticsNumber());
                }else {
                    row.createCell(1).setCellValue("");
                }
                //采購單號
                if(null != detailList && !detailList.isEmpty()) {
                    for (CarrierOrderDetail detaildto : detailList) {
                        purchaseOrderNumber += detaildto.getPurchaseOrderNumber()+",";
                    }
                    row.createCell(2).setCellValue(purchaseOrderNumber.substring(0, purchaseOrderNumber.length()-1));
                }else {
                    row.createCell(2).setCellValue("");
                }
                //發貨時間
                if(null != dto.getTakingDate()) {
                    row.createCell(3).setCellValue(sdf.format(dto.getTakingDate()));
                }else {
                    row.createCell(3).setCellValue("");
                }
                //到貨時間
                if(null != dto.getDeliveryDate()) {
                    row.createCell(4).setCellValue(sdf.format(dto.getDeliveryDate()));
                }else {
                    row.createCell(4).setCellValue("");
                }
                //總體積
                if(null != dto.getTotalAllVolume()) {
                    row.createCell(5).setCellValue(dto.getTotalAllVolume()+"m³");
                }else {
                    row.createCell(5).setCellValue("");
                }
                //箱型
                if(null != truckList && !truckList.isEmpty()) {
                    for (CarrierOrderTruck truckdto : truckList) {
                        if("面包車".equals(truckdto.getTruckType())) {
                            row.createCell(6).setCellValue(truckdto.getTruckNumber()+"輛");
                        }else if("金杯車".equals(truckdto.getTruckType())){
                            row.createCell(7).setCellValue(truckdto.getTruckNumber()+"輛");
                        }else if("2米7平板".equals(truckdto.getTruckType())){
                            row.createCell(8).setCellValue(truckdto.getTruckNumber()+"輛");
                        }else if("3米8平板".equals(truckdto.getTruckType())){
                            row.createCell(9).setCellValue(truckdto.getTruckNumber()+"輛");
                        }else if("4米2平板".equals(truckdto.getTruckType())){
                            row.createCell(10).setCellValue(truckdto.getTruckNumber()+"輛");
                        }else if("4米2廂車".equals(truckdto.getTruckType())){
                            row.createCell(11).setCellValue(truckdto.getTruckNumber()+"輛");
                        }else if("4米2高欄".equals(truckdto.getTruckType())){
                            row.createCell(12).setCellValue(truckdto.getTruckNumber()+"輛");
                        }else if("6米8廂車".equals(truckdto.getTruckType())){
                            row.createCell(13).setCellValue(truckdto.getTruckNumber()+"輛");
                        }else if("6米8高欄".equals(truckdto.getTruckType())){
                            row.createCell(14).setCellValue(truckdto.getTruckNumber()+"輛");
                        }else if("7米6廂車".equals(truckdto.getTruckType())){
                            row.createCell(15).setCellValue(truckdto.getTruckNumber()+"輛");
                        }else if("9米6廂車".equals(truckdto.getTruckType())){
                            row.createCell(16).setCellValue(truckdto.getTruckNumber()+"輛");
                        }else if("9米6高欄".equals(truckdto.getTruckType())){
                            row.createCell(17).setCellValue(truckdto.getTruckNumber()+"輛");
                        }else if("12米5廂車".equals(truckdto.getTruckType())){
                            row.createCell(18).setCellValue(truckdto.getTruckNumber()+"輛");
                        }else if("13米高欄".equals(truckdto.getTruckType())){
                            row.createCell(19).setCellValue(truckdto.getTruckNumber()+"輛");
                        }else if("16米5廂車".equals(truckdto.getTruckType())){
                            row.createCell(20).setCellValue(truckdto.getTruckNumber()+"輛");
                        }else if("17米5廂車".equals(truckdto.getTruckType())){
                            row.createCell(21).setCellValue(truckdto.getTruckNumber()+"輛");
                        }
                    }
                }
                //送貨距離
                if(null != dto.getDistance()) {
                    row.createCell(22).setCellValue(dto.getDistance()+"km");
                }else {
                    row.createCell(22).setCellValue("");
                }
                //運輸費用
                if(null != dto.getFreight()) {
                    row.createCell(23).setCellValue(dto.getFreight()+"元");
                }else {
                    row.createCell(23).setCellValue("");
                }
                //裝貨費用,卸貨費用
                if(null != serveList && !serveList.isEmpty()) {
                    for (CarrierOrderServe servedto : serveList) {
                        if("裝貨".equals(servedto.getServiceType())) {
                            row.createCell(24).setCellValue(servedto.getPrice()+"元");
                        }else if("卸貨".equals(servedto.getServiceType())){
                            row.createCell(25).setCellValue(servedto.getPrice()+"元");
                        }
                    }
                }
                //異常費用
                if(null != dto.getOtherCost()) {
                    row.createCell(26).setCellValue(dto.getOtherCost()+"元");
                }else {
                    row.createCell(26).setCellValue("");
                }
                //合計
                if(null != dto.getTotalCost()) {
                    row.createCell(27).setCellValue(dto.getTotalCost()+"元");
                }else {
                    row.createCell(27).setCellValue("");
                }
                //備注
                if(null != dto.getCarrierRemark()) {
                    row.createCell(28).setCellValue(dto.getCarrierRemark());
                }else {
                    row.createCell(28).setCellValue("");
                }
            }
        }
        return workboot;
    }

5.項目中引入第2步創建的模板,要與Service實現類中path路徑對應:

 

6.效果:

效果圖

 

 7.XSSFWorkbook 做導出也可以不引入模板,通過workboot.createSheet("訂單列表")創建sheet頁,並設定表格樣式,可實現相同的效果。但是我覺得導入模板比較簡單,容易上手。

 如有錯誤,請指出,謝謝!

 


免責聲明!

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



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