zoukankan      html  css  js  c++  java
  • shh中导出excel(使用poi)

    1.在struts.xml

    <action name="exportExcelAction" class="com.ht.action.exam.ExamResultAction">      
    
        <result name="success" type="stream">    <!-- type="stream"表示要以二进制的文件去进行下载 -->      
    
          <param name="contentType">application/vnd.ms-excel</param>    <!-- 指明文件的类型 -->      
    
          <param name="contentDisposition">attachment;filename="grade_analysis.xls"</param>
    
              <!--attachment属性是要选择打开时单独打开,而不是在浏览器中打开,默认是inline. 指明下载时文件的名字 -->      
    
          <param name="inputName">exportResult</param><!-- 指明文件下载的方法的名字,这里用特别注意必须与Action中的方法名相同 -->    
    
      </result>      
    
     </action>

    2.在action

    public InputStream getExportResult() throws UnsupportedEncodingException
    
    {            //这个get方法名必须与struts.xml中指定的文件下载方法名对应   
    
        claId = java.net.URLDecoder.decode(claId, "UTF-8");     //为了解决js传值的乱码问题,进行解码   
    
        str = java.net.URLDecoder.decode(str, "UTF-8");   
    
        return this.resultService.getInputStream(claId,str);
    
     }

    3.在service

    //实现excel的导出  
    
    public InputStream getInputStream(String claId,String str);//这是定义输入流的一个方法

    4.在service 实现层

     /*   * 对excel导出做处理   * */  
    
    public InputStream getInputStream(String claId,String str) {   
    
      //System.out.println("班级"+claId+"  字符串"+str);   //先处理传过来的字符串  
    
       String[] type=str.split("-");  
    
       int len =type.length;   
    
      //System.out.println("数组长度为:"+len);   
    
      HSSFWorkbook wb=new HSSFWorkbook();//使用poi,导入poi的包,首先要生成一个HSSFWorkbook对象   
    
      HSSFSheet sheet=wb.createSheet("sheet1");//创建excel的sheet      
    
      HSSFRow row=sheet.createRow(0);//创建第一行      
    
      HSSFCell cell=row.createCell((short)0);//创建第一个单元格   
    
      cell.setEncoding(HSSFCell.ENCODING_UTF_16);//每个单元格都要设置编码格式   
    
      cell.setCellValue("序号");   
    
      for(int i=0;i<len;i++)
    
      {    
    
        cell=row.createCell((short)(i+1));//依次创建单元格    
    
        cell.setEncoding(HSSFCell.ENCODING_UTF_16);//每个单元格都要设置编码格式    
    
        cell.setCellValue(type[i]);   }   
    
    /*到此表头已经设计好了   
    
    *  
    
    * 下面是读取数据库中的数据
    
    */  
    
     String queryString="from Result as res where res.student.classes.claId="+claId;  
    
     List<Result> res=null;   
    
    res=resultDAO.getListByHQL(queryString);  
    
     //将符合要求的成绩记录存储到List集合中   
    
    for(int i=0;i<res.size();i++)
    
    {   
    
     Result result=res.get(i); //获得一条记录   
    
     row=sheet.createRow(i+1);//产生下面的其他行   
    
     cell=row.createCell((short)0);//第一个单元格    
    
    cell.setEncoding(HSSFCell.ENCODING_UTF_16);    
    
    cell.setCellValue(i+1);       
    
     for(int a=0;a<len;a++){  
    
     //后面的单元格依次显示要显示的内容     
    
    //System.out.println("现在是谁"+type[a]);  
    
       cell=row.createCell((short)(a+1));     
    
      cell.setEncoding(HSSFCell.ENCODING_UTF_16);     
    
    if(type[a].equals("考生学号"))
    
    {      
    
      cell.setCellValue(result.getStudent().getStuNum());    
    
     }
    
    else if(type[a].equals("考生姓名"))
    
    {      
    
      cell.setCellValue(result.getStudent().getStuName());     
    
    }
    
    else if(type[a].equals("考生姓名"))
    
    {      
    
      cell.setCellValue(result.getStudent().getStuName());     
    
    }
    
    else if(type[a].equals("考生班级"))
    
    {      
    
      cell.setCellValue(result.getStudent().getClasses().getClaName());    
    
     }
    
    else if(type[a].equals("考生性别"))
    
    {      
    
      cell.setCellValue(result.getStudent().getStuSex());     
    
    }
    
    else if(type[a].equals("考试得分"))
    
    {      
    
      cell.setCellValue(result.getResScore());     
    
    }
    
    else if(type[a].equals("测试时间"))
    
    {      
    
      cell.setCellValue(result.getResBegin());     
    
    }
    
    else if(type[a].equals("交卷时间"))
    
    {     
    
       cell.setCellValue(result.getResEnd());    
    
     }
    
    else if(type[a].equals("考试用时"))
    
    {      
    
    try {       
    
      cell.setCellValue(getTimeDifference(result.getResEnd(),result.getResBegin()));      
    
    } catch (Exception e) {       
    
      e.printStackTrace();      
    
    }     
    
    }    
    
    }  
    
     }   
    
    /*   
    
    * 以上就生成了所需的excel文件   
    
    *下面写另外一个方法直接不产生临时文件,就在内存中   
    
    */   
    
    ByteArrayOutputStream os=new ByteArrayOutputStream();  
    
     try {    
    
      wb.write(os);  
    
     } catch (IOException e) {    
    
      e.printStackTrace();   
    
    }   
    
    byte[] content=os.toByteArray();   
    
      InputStream is=new ByteArrayInputStream(content);   return is;   
    
      }

    5.resultDAO

      

    public List<Result> getListByHQL(String queryString);

    6.DAO的实现层

    public List<Result> getListByHQL(String queryString)
    
    {   
    
      return getHibernateTemplate().find(queryString);
    
     }

    7.resullt 的实体类

      

    package com.ht.entity;
    
    /**  
    
    * Result entity. @author MyEclipse Persistence Tools
    
     */
    
    public class Result implements java.io.Serializable {
    
     // Fields
    
     private Integer resId;  
    
    private Student student;  
    
    private ClassTest classTest;  
    
    private String resBegin;  
    
    private String resEnd;  
    
    private String resScore;
    
     // Constructors
    
     /** default constructor */  
    
    public Result() {  }
    
     /** full constructor */  
    
    public Result(Student student, ClassTest classTest, String resBegin,    String resEnd, String resScore)
    
    {
    
        this.student = student;  
    
       this.classTest = classTest;   
    
       this.resBegin = resBegin;   
    
       this.resEnd = resEnd;  
    
       this.resScore = resScore;  
    
    }
    
     // Property accessors
    
     public Integer getResId() {   return this.resId;  }
    
     public void setResId(Integer resId) {   this.resId = resId;  }
    
     public Student getStudent() {   return this.student;  }
    
     public void setStudent(Student student) {   this.student = student;  }
    
     public ClassTest getClassTest() {   return this.classTest;  }
    
     public void setClassTest(ClassTest classTest) {   this.classTest = classTest;  }
    
     public String getResBegin() {   return this.resBegin;  }
    
     public void setResBegin(String resBegin) {   this.resBegin = resBegin;  }
    
     public String getResEnd() {   return this.resEnd;  }
    
     public void setResEnd(String resEnd) {   this.resEnd = resEnd;  }
    
     public String getResScore() {   return this.resScore;  }
    
     public void setResScore(String resScore) {   this.resScore = resScore;  }
    
    }

     8.表现层

    <html>
    
    <head><title>导出excel</title><head>
    
    <body>
    
    <p style="text-align:center; padding-top:15px">  
    
    选择班级:
    
     <select name="claId" id="claId" style="color:#999999">   
    
      <option value="0" style="color:#999999">==选择==</option>   
    
         <option value=1 style="color:#000000">药学1班</option>  
    
        <option value=2 style="color:#000000">药学2班</option>   
    
    </select>
    
    </p>
    
    <p></p>
    
    <p style="text-align:center; padding-top:15px">  选择需要导出的选项:</br>
    
       <input type="checkbox" name="stu" id="a" value="考生学号">考生学号&nbsp;&nbsp;  
    
      <input type="checkbox" name="stu" id="a" value="考生姓名">考生姓名</br>  
    
      <input type="checkbox" name="stu" id="a" value="考生班级">考生班级&nbsp;&nbsp;  
    
      <input type="checkbox" name="stu" id="a" value="考生性别">考生性别</br>  
    
      <input type="checkbox" name="stu" id="a" value="考试得分">考试得分&nbsp;&nbsp;
    
       <input type="checkbox" name="stu" id="a" value="测试时间">测试时间</br>  
    
      <input type="checkbox" name="stu" id="a" value="交卷时间">交卷时间&nbsp;&nbsp;  
    
      <input type="checkbox" name="stu" id="a" value="考试用时">考试用时</br>
    
    </p>
    
     <p style="text-align:center; padding-top:15px">   
    
      <input type="button" value="导出" onclick="exportExcel('exportExcelAction.action');"/>
    
    </p>
    
     </body>
    
    </html>

     6.这里还用到了js进行传值,根据你的需要可以进行修改

    js:

     //导出excel操作,不能使用ajax
    
     function exportExcel(tagAction)
    
    {  
    
      var claId=$("#claId").val();  
    
      var input=$("input[name='stu']");//先得到所有的值,通过循环来判断  
    
      var str="";  
    
    for(i=0;i<input.length;i++)
    
    {     
    
      if(input[i].checked)
    
      {       
    
      str=str+input[i].value+"-";    //这里将选定的项连接成一个字符串来传给后台
    
        }  
    
    }
    
       if(claId=="0")
    
    {   
    
      alert("请先选择班级!");  
    
       return;  
    
    }
    
     if(str==null||str=="")
    
      {  
    
     alert("请先选择要导出的项!");
    
      return;  
    
    }  
    
    //进行乱码处理,进行两次encodeURI包装  
    
    window.location.href="exportExcelAction.action?claId="+encodeURI(encodeURI(claId))+"&str="+encodeURI(encodeURI(str))+"";
    
     }
  • 相关阅读:
    【BZOJ5286】[HNOI2018]转盘(线段树)
    【BZOJ2003】[HNOI2010]矩阵(搜索)
    【BZOJ2000】[HNOI2000]取石头游戏(贪心,博弈论)
    【BZOJ1998】[HNOI2010]物品调度(并查集,模拟)
    【BZOJ2001】[HNOI2010]城市建设(CDQ分治,线段树分治)
    【BZOJ1925】[SDOI2010]地精部落(动态规划)
    【BZOJ1856】[SCOI2010]字符串(组合数学)
    【BZOJ1826】[JSOI2010]缓存交换(贪心)
    【BZOJ1823】[JSOI2010]满汉全席(2-sat)
    【BZOJ1822】[JSOI2010]冷冻波(二分,网络流)
  • 原文地址:https://www.cnblogs.com/shenliang123/p/2225154.html
Copyright © 2011-2022 走看看