1. 程式人生 > >Java 讓excel匯出大量資料進行分表打成壓縮包進行下載

Java 讓excel匯出大量資料進行分表打成壓縮包進行下載

這段時間有涉及到 關於從前臺自己導資料到伺服器,然後再把資料匯入資料庫的操作,當時用了兩天多時間才完成這個事情。最近有接到優化資料匯出這個功能的一些任務,雖然做得還不是很完善,但也有自己的一些思想在裡面。正好這是我第一次發技術部落格,也就用這個來作為第一個案例好了。

public String consumeReport() throws IOException {

        int excelnum=0;
        List<File> srcfile=new ArrayList<File>();
        String templateName = "template.xlsx";// Excel模版
        URL url = this.getClass().getResource("/");// CarParkAction.class.getResource("/");
        String docsPath = url.getPath();     
        String templatePath = docsPath + templateName;
        OrderService orderService = ((OrderService) ContextHolder.getBean("orderServiceImpl"));
        List<OrderInfo> list = orderService.findOrderInfoList(orderInfo);
        if (list != null) {
            System.out.println("*******************有記錄,開始導資料");
        while(list.size()>excelnum*100000){
            ExcelTemplate excel = ExcelTemplate.getInstance().readTemplatePath(
                    templatePath);
            String fileName = orderInfo.getParkId() +"_"+excelnum+ "_ConsumeInfo.xlsx";// 匯出Excel檔名
            String filePath = docsPath + fileName;
            excel.creatNewRow();
            excel.createNewCol("停車場ID");
            excel.createNewCol("車牌號碼");
            excel.createNewCol("消費型別");
            //excel.createNewCol("支付型別");
            excel.createNewCol("消費金額(元)");
            excel.createNewCol("開始時間");
            excel.createNewCol("結束時間");
            excel.createNewCol("消費時間");
            for (int i = excelnum*100000; i <=excelnum*100000 + 99999; i++) {
                if(list.size()<(i+1)){
                    break;
                }
                OrderInfo orderInfoResult=list.get(i);
                if(orderInfoResult==null){
                    break;
                }
                    
                excel.creatNewRow();
                excel.createNewCol(orderInfoResult.getParkId() + "");
                excel.createNewCol(orderInfoResult.getCarCode());
                
                if(orderInfoResult.getCostType()!=null){
                    int costType = orderInfoResult.getCostType();
                    switch (costType) {
                    case 1:
                        excel.createNewCol("包月");
                        break;
                    case 2:
                        excel.createNewCol("雲繳費");
                        break;
                    case 3:
                        excel.createNewCol("現金");
                        break;
                    case 4:
                        excel.createNewCol("充值");
                        break;
                    default:
                        excel.createNewCol("其它型別");
                        break;
                    }
                }else{
                    excel.createNewCol("其它型別");
                }
                excel.createNewCol(DateUtils.ftoy(orderInfoResult.getOrderFee(), 100));
                excel.createNewCol(DateUtils.dateToString(orderInfoResult
                        .getStartTime()));
                excel.createNewCol(DateUtils.dateToString(orderInfoResult
                        .getEndTime()));
                excel.createNewCol(DateUtils.dateToString(orderInfoResult
                        .getCreateTime()));
            }
            excel.writeToFile(filePath);
            srcfile.add(new File(filePath));
            excelnum++;
        }
         String fileName = orderInfo.getParkId() +".zip";// 匯出Excel檔名
         String filePath = docsPath + fileName;    
//         File zipfile = new File(filePath);  
         //壓縮檔案
         craeteZipPath(srcfile, filePath,docsPath);    
         //下載檔案
         download(filePath, response);
        // 如果檔案路徑所對應的檔案存在,並且是一個檔案,則直接刪除
         File filedelect = new File(filePath);
         filedelect.delete();
        }else {
            System.out.println("*******************沒有記錄");
            ResponseUtil.responseJson(response, "300");
        }
        return null;
    }