• java poi 从服务器下载模板写入数据再导出


                

          最近写了一个,Excel 的 写入和导出.   需求是这样的.   在新建合同的时候,会有导出合同的数据,    导出的模板是固定的,,需要在模板里面写入合同的信息.

          first   :  下载模板   > 写入数据 > 输出

         下载模板  :   

         

     StringBuilder path = new StringBuilder("");   
                     path.append(request.getSession().getServletContext().getRealPath(""));
                     path.append(File.separator);
                     path.append("WEB-INF");
                     path.append(File.separator);
                     path.append("classes");
                     path.append(File.separator);
                     path.append("template");
                     path.append(File.separator);
                 String filePath=path.toString()+"\"+"contractDemo.xlsx"; //这是获取jboss服务器上的模板路径
    FileInputStream fis = new FileInputStream(filePath); XSSFWorkbook workBook=new XSSFWorkbook(fis);  // 新建一个workBook  用来新建Excel 的sheet 


       

         //  这个是下载和输出excel      excel写入数据 是在另一个方法里面写着的 ,方法分开来写比较清晰.

         try{       

    StringBuilder path = new StringBuilder(""); path.append(request.getSession().getServletContext().getRealPath("")); path.append(File.separator); path.append("WEB-INF"); path.append(File.separator); path.append("classes"); path.append(File.separator); path.append("template"); path.append(File.separator); String filePath=path.toString()+"\"+"contractDemo.xlsx"; // 服务器上的模板路径 FileInputStream fis = new FileInputStream(filePath); // 输入流 XSSFWorkbook workBook=new XSSFWorkbook(fis); String fileName="test_"+System.currentTimeMillis()+".xlsx"; OutputStream out=new FileOutputStream("d:/"+fileName); contractExportTemplate.createSheet(workBook,vo,conf); workBook.setForceFormulaRecalculation(true); workBook.write(out); fis.close(); out.flush(); out.close(); return "success"; }catch(Exception e){ e.printStackTrace(); return "error"; }

      

     //    下面的代码其实就是在excel  里面写入数据,我是根据模板来写的,所以sheet 表里面的格式都是固定的.我只要获取具体的单元格然后写入数据就可以了.

    //给excel表添加数据
       public  void excelContractWriteData(XSSFWorkbook workBook,XSSFSheet sheet, List<ContractExcelGroupByStoreVo> conList1,
    		   List<ContractExcelGroupByAreaVo> conList2,List<ContractExcelGroupByStoreVo> conList3) throws Exception{
    	   if(conList1.size()!=0){
    		   XSSFRow row0=sheet.getRow(0);
    		   
    		   row0.getCell(2).setCellValue(conList1.get(0).getTaskId()+""+
    		   (conList1.get(0).getPrintSeqNo()==null?"1":conList1.get(0).getPrintSeqNo()));//写入打印编号 
    		   
    		   XSSFRow row=sheet.getRow(2);
    		  //获取sheet表的单元格,写入数据 
    		   row.getCell(2).setCellValue(conList1.get(0).getYear()); 
    		   row.getCell(4).setCellValue(conList1.get(0).getCatlgId());
    		   row.getCell(6).setCellValue(conList1.get(0).getSupNo()); 
    	   }
    	   if(conList2.size()!=0){
    		   for( ContractExcelGroupByAreaVo vo :conList2){
    			   if(vo.getAreaName()!="" && "华东".equals(vo.getAreaName().toString()))
    			   {
    				   sheet.getRow(6).getCell(2).setCellValue(vo.getStoreNum());
    				   sheet.getRow(6).getCell(3).setCellValue(vo.getTargetNum());
    			   }
    			   if(vo.getAreaName()!="" && "西南".equals(vo.getAreaName().toString()))
    			   {
    				   sheet.getRow(7).getCell(2).setCellValue(vo.getStoreNum());
    				   sheet.getRow(7).getCell(3).setCellValue(vo.getTargetNum());
    			   }
    			   if(vo.getAreaName()!="" && "华北".equals(vo.getAreaName().toString()))
    			   {
    				   sheet.getRow(8).getCell(2).setCellValue(vo.getStoreNum());
    				   sheet.getRow(8).getCell(3).setCellValue(vo.getTargetNum());
    			   }
    			   if(vo.getAreaName()!="" && "华南".equals(vo.getAreaName().toString()))
    			   {
    				   sheet.getRow(9).getCell(2).setCellValue(vo.getStoreNum());
    				   sheet.getRow(9).getCell(3).setCellValue(vo.getTargetNum());
    			   }
    			   if(vo.getAreaName()!="" && "华中".equals(vo.getAreaName().toString()))
    			   {
    				   sheet.getRow(10).getCell(2).setCellValue(vo.getStoreNum());
    				   sheet.getRow(10).getCell(3).setCellValue(vo.getTargetNum());
    			   }
    		   }
    	   }
    		if(conList3.size()!=0){
    			int  rowIndex=14;  //这个数字是根据excel模板定的
    			for(ContractExcelGroupByStoreVo conExcel : conList3){
    				sheet.getRow(rowIndex).getCell(1).setCellValue(conExcel.getAreaName()); 
    				sheet.getRow(rowIndex).getCell(2).setCellValue(conExcel.getProvinceName());
    				sheet.getRow(rowIndex).getCell(3).setCellValue(conExcel.getCityName());
    				sheet.getRow(rowIndex).getCell(4).setCellValue(conExcel.getStoreNum()+"-"+conExcel.getStoreName()); //门店的编号
    				sheet.getRow(rowIndex).getCell(5).setCellValue(conExcel.getStoreAmount());
    				sheet.getRow(rowIndex).getCell(6).setCellValue(conExcel.getMemo());
    				if(conExcel.getServReqd()!=null){
    				String  month= conExcel.getServReqd().toString();
    				sheet.getRow(rowIndex).getCell(7).setCellValue(this.stringtoIntArray(month));
    				}else{
    					sheet.getRow(rowIndex).getCell(7).setCellValue(conExcel.getDateStr());
    				}
    				rowIndex++;
    			}
    	     }
    	   
    	}
      
    

      

       //  这里是一个排序,  月份有 1 2 3 4 5 6 7 8 9 10 11 12      但是每次出现的月份是不固定的   可能中间会有断开的月份.  所以需要先排序然后 判断  第二个数和第一个数相差多少, 如果相差大于2的话就说明 月份中间是有断开的.那就把连续的几个数的头尾  用字符串拼接起来,显示

     //把 月份数组转换为字符串
       public String  stringtoIntArray(String str) {  
    	   
    	   StringBuffer dateStage= new StringBuffer("");
    			   String strs[] = str.split(",");  
    			   int array[] = new int[strs.length];  
    			   for(int i=0;i<strs.length;i++){  
    			       array[i]=Integer.parseInt(strs[i]); 
    			   }
    	          for (int i = 0; i < array.length; i++) {
    	               for(int j = 0; j<array.length-i-1; j++){
    	                   if(array[j]>array[j+1]){
    	                      int temp = array[j];
    	                      array[j] = array[j+1];
    	                      array[j+1] = temp;
    	                  }
    	             }
    	            }
    	      int a=array[0]; 
    	       for (int j = 1; j < array.length; j++) {
    			if(array[j] - array[j-1]>=2){ 
    				dateStage.append(""+a+"-"+array[j-1]+","); 
    				a=array[j];   
    			}
    			if(j==(array.length-1)){
    				
    				dateStage.append(""+a+"-"+array[j]);
    			}
    		}
    	     return dateStage.toString();
    	    
    	   }




      

      

  • 相关阅读:
    Invalid bound statement (not found)解决方法
    MySQL的sum()函数
    关于Mybatis的java.lang.UnsupportedOperationException异常处理
    博客迁移
    Building Blog(个性化博客)2
    走一波服务器
    JZ高中OJ 1036. [SCOI2009]迷路
    JZ初中OJ 2296. [noip普及组2]神殿
    JZ初中OJ 2295. [noip普及组2]栈
    JZ初中OJ 2298. [noip普及组2]异或
  • 原文地址:https://www.cnblogs.com/murong/p/5390548.html
Copyright © 2020-2023  润新知