我是用c:foreach将servlet里的resultset以表格的形式显示在JSP页面里的,现在我想通过一个导出按钮将这个表格导出成EXCEL,也可以通过一个打印按钮打印这个表格的内容,请问要用什么方法?

解决方案 »

  1.   

    http://blog.csdn.net/oo_chen/archive/2006/02/12/597254.aspx
      

  2.   

    如果你要只是做报表的话,建议你查查iReport这个工具!
      

  3.   

    有一个很死的方法
    你再写一个一模一样的页面,但是页面的头要改成:<%@ page contentType="application/vnd.ms-excel;charset=GBK" language="java"%>
    然后你的打印按钮连接到你这个页面的地址就ok拉
      

  4.   

    这个application/vnd.ms-excel是针对excel的,当然可以是.doc的
      

  5.   

    可以这样实现。你的按钮action指向一个servlet类。下面主要代码实现。下面excel为servlet类名
    String filename = String.valueOf(year)+String.valueOf(month)+String.valueOf(day)+h+mise+".xls";//用时间做文件名
    String path = getServletContext().getRealPath("excelexport");//excelexport工程目录下必须有虚拟文件夹,但是实际上文件不存放这里。你可以选择保存路径。
    System.out.println("path:"+path);
    try{
    FileOutputStream fos = new FileOutputStream(path+"/"+filename); 

    // 创建新的Excel 工作簿
    HSSFWorkbook wb = new HSSFWorkbook(); 
    // 在Excel 工作簿中建一工作表
        HSSFSheet s = wb.createSheet(); 
        String sheetName = year+"-"+month+"-"+day;
        wb.setSheetName(0, sheetName); 
        //在索引0的位置创建行(第一行),这个是你数据库读取的时候有几个字段?
        HSSFRow row = s.createRow((short)0); 
        HSSFCell cell0 = row.createCell((short) 0);// 第一列
        HSSFCell cell1 = row.createCell((short) 1);
        HSSFCell cell2 = row.createCell((short) 2);
        HSSFCell cell3 = row.createCell((short) 3);
        HSSFCell cell4 = row.createCell((short) 4);
        HSSFCell cell5 = row.createCell((short) 5);
        HSSFCell cell6 = row.createCell((short) 6);
        // 定义单元格为字符串类型
        cell0.setCellType(HSSFCell.CELL_TYPE_STRING);
        cell1.setCellType(HSSFCell.CELL_TYPE_STRING);
        cell2.setCellType(HSSFCell.CELL_TYPE_STRING);
        cell3.setCellType(HSSFCell.CELL_TYPE_STRING);
        cell4.setCellType(HSSFCell.CELL_TYPE_STRING);
        cell5.setCellType(HSSFCell.CELL_TYPE_STRING);
        cell6.setCellType(HSSFCell.CELL_TYPE_STRING);
        
        cell0.setEncoding(HSSFCell.ENCODING_UTF_16);
        cell1.setEncoding(HSSFCell.ENCODING_UTF_16);
        cell2.setEncoding(HSSFCell.ENCODING_UTF_16);
        cell3.setEncoding(HSSFCell.ENCODING_UTF_16);
        cell4.setEncoding(HSSFCell.ENCODING_UTF_16);
        cell5.setEncoding(HSSFCell.ENCODING_UTF_16);
        cell6.setEncoding(HSSFCell.ENCODING_UTF_16);
        // 在单元格中输入数据
        cell0.setCellValue("科室名");
        cell1.setCellValue("版组");
        cell2.setCellValue("注册名");   
        cell3.setCellValue("问题题目");
        cell4.setCellValue("问题内容");
        cell5.setCellValue("发表时间");
        cell6.setCellValue("Status");
        KSuser ks =new KSuser();
        
       HSSFRow[] rows = null;
        if(list != null && list.size()>0){
         rows = new HSSFRow[list.size()];
        }
        int j = 1;
       for(int k=0;k<list.size();k++){
        ks =list.get(k);
       //设置行从第二行开始
        rows[j-1] =s.createRow((short)(j));
            String[] str =new String[7];
            str[0]=ks.getKeshi();
            str[1]=ks.getBanzu();
            str[2]=ks.getReg_name();
            str[3]=ks.getSubject();
            str[4]=ks.getText();
            str[5]=ks.getRe_day().toString();
            str[6]=ks.getStatus();
         for(int i=1;i<8;i++){
         HSSFCell cell =rows[j-1].createCell((short)(i-1));
         cell.setEncoding(HSSFCell.ENCODING_UTF_16);
         cell.setCellType(HSSFCell.CELL_TYPE_STRING);
         cell.setCellValue(str[i-1]);
         }
         j++;
        }
      
        wb.write(fos);
        fos.close();
       }catch(Exception e){

       }
       String urlname = request.getRequestURI();
       System.out.println("reques.getRequestURI:"+urlname);
       urlname = urlname.replaceAll("excel", "excelexport");构造xsl路径
       urlname = urlname+"/"+filename;
       System.out.println("urlname:"+urlname);
       //request.getSession().setAttribute("excelfile", urlname);
       response.sendRedirect(urlname);
    不知道上面的写法能满足楼主的需求没?很详细了
      

  6.   

    3楼FengShen_Xia
    你的方法我试过了,但不知道为什么,导出后,EXCEL里只有标题栏的内容
    显示的数据全部都没能导出成功