我在JSP页面里显示查询数据库的结果,现在我想做个打印按钮,一按打印就能直接把查询到的数据导入到EXCEL中,就可以随心所欲的打印了?大家帮忙,拜托了,最好有例子详细一点的

解决方案 »

  1.   

    自己做成表格在HTML里。然后用EXCELL打开
      

  2.   

    http://community.csdn.net/Expert/topic/4719/4719998.xml?temp=.1287195
      

  3.   

    可以把你的表格贴到excel里,修改修改成你要的样式,把excel另存为html页,OK,真接传传值forward一下就可以了。
      

  4.   

    在后台写到CSV格式里,或利用XLS格式的API,然后通过前台下载,即可实现。我现在做一个项目,就是把原始数据写到Excel模板里,然后通过前台直接打开,在打开时,模板内的宏自动执行,将原始数据做成客户要求的报表,效果还可以。
      

  5.   

    提供一种JS的方法,缺点需要降低IE安全等级,容易被3721类软件屏蔽
    //导出EXCEL表
    function genExcel(iColumnNO,i){
      try{
      if(i!=0)
    var str = document.all.layer[i].innerHTML;
      else
    var str = document.all.layer.innerHTML;
    var w = window.open('','_blank','width=1, height=1');
    w.document.write(str);
    w.document.execCommand('SelectAll');
    w.document.execCommand('Copy');
    w.close();
    var oXL = new ActiveXObject('Excel.Application');
    oXL.Visible = true;
    var oWB = oXL.Workbooks.Add();
    var oSheet = oWB.ActiveSheet;
    oSheet.Paste(); var oSelection = oXL.selection;
    oSelection.Font.Size = 9; if(iColumnNO > 0 && iColumnNO <= 26){
    var strA = "A";
    var sColumnNO = String.fromCharCode(iColumnNO+strA.charCodeAt());
    oSheet.Columns(sColumnNO + ':' + sColumnNO).WrapText = 0;
    oSheet.Columns(sColumnNO + ':' + sColumnNO).NumberFormatLocal = '@';
    oSheet.Columns(sColumnNO + ':' + sColumnNO).EntireColumn.AutoFit();
    }
    /* if(iColumnNO1 > 0 && iColumnNO1 <= 26){
    var strA = "A";
    var sColumnNO = String.fromCharCode(iColumnNO1+strA.charCodeAt());
    oSheet.Columns(sColumnNO + ':' + sColumnNO).WrapText = 0;
    oSheet.Columns(sColumnNO + ':' + sColumnNO).NumberFormatLocal = '@';
    oSheet.Columns(sColumnNO + ':' + sColumnNO).EntireColumn.AutoFit();
    }
    */
      }catch (err){
    alert("创建对象错误:"+err+"\n请你降低IE安全等级,重新单击\"导到EXCEL文件\"并允许运行ActiveX!");
      }
    }
    页面
      <link rel="stylesheet" href="../print.css" media="print">
      <div id="layer" class=main_tab>
    ...........
                <div class="printbt" align="center"> //导出时屏蔽
                  <input type="button" name="exp" value="导到EXCEL文件" onClick="genExcel(1,0)">
                </div>
                </div>
    CSS
    table {  font-family: "宋体"; font-size: 14px}
    input{border-style:none;background-color: #FFFFFF}
    .printbt {font-family: "宋体"; font-size: 12px ;display:none}
    A:link {text-decoration:none}
    A:visited {text-decoration:none}
    A:active {text-decoration:none}
      

  6.   

    着急啊,能不能写点完整的代码,这方面我没做过,我看别人实现的,一点打印就把查询数据库得到的所有记录导入到EXCEL里了,并且在窗口直接弹出EXCEL,谁有详细代码啊,拜托了!
      

  7.   

    使用HSSF 
    将查询的数据集传入
    void createReport(ResultSet rs)
    {
       try
       {
    ResultSetMetaData rsmd = rs.getMetaData();
    //获得数据集的列数
      int numbercols=rsmd.getColumnCount();
      rs.last();
        //将数据集游标置为最后一行,获得数据集的行数
      int numberrows=rs.getRow();
    //生成一个HSSFWorkbook对象,进行操作
    HSSFWorkbook wb=new HSSFWorkbook();
    //设置显示的字体以及相关的样式
    HSSFFont font = wb.createFont();
        font.setFontHeightInPoints((short)8);
        font.setFontName("Courier New");
        font.setItalic(false);
        font.setStrikeout(false);
       
        //设置标题栏单元格的样式
    HSSFCellStyle cellHeadStyle=wb.createCellStyle();
        cellHeadStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);
    cellHeadStyle.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);
        cellHeadStyle.setBorderLeft((short)1);
        cellHeadStyle.setBorderRight((short)1);
        cellHeadStyle.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);
    cellHeadStyle.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index);
        cellHeadStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

        //设置数据行的字体以及以及相关的对齐方式
    HSSFCellStyle cellDataStyle=wb.createCellStyle();
        cellDataStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT);
    cellDataStyle.setFont(font);
     
        //新建一个HSSFSheet对象
      HSSFSheet sheet=wb.createSheet("new sheet");

    //处理标题行,建立单元格,得到相关表字段名称写入到相关的单元格
      HSSFRow row=sheet.createRow((short)0);
      for(int i=1;i<=numbercols;i++)
      {
            HSSFCell cellHead = row.createCell((short)(i-1));
          cellHead.setCellStyle(cellHeadStyle);
            cellHead.setCellValue(rsmd.getColumnLabel(i));
      }
      //重新定位数据行
    rs.beforeFirst();
    int j=1;
    //将每一行的数据写入到相应的单元格
      while(rs.next() && j<=numberrows)
      {
      HSSFRow row1=sheet.createRow((short)j);
      for(int k=1;k<=numbercols;k++)
      {
    HSSFCell cellData = row1.createCell((short)(k-1));
    cellData.setCellStyle(cellDataStyle);
    //设置编码类型,用于支持中文的输出
                cellData.setEncoding(HSSFCell.ENCODING_UTF_16);
            /*判断原来数据的格式,然后以相同的数据格式写入单元格,以方便用户
                可以进行一定的统计工作,日期类型和字符串类型使用String类型进行输出
                */
    if(rsmd.getColumnType(k)==java.sql.Types.INTEGER)
      cellData.setCellValue(rs.getInt(k));
    else if(rsmd.getColumnType(k)==java.sql.Types.VARCHAR)
    cellData.setCellValue(rs.getString(k));
    else if(rsmd.getColumnType(k)==java.sql.Types.REAL)
    cellData.setCellValue(rs.getDouble(k));
    else
    cellData.setCellValue(rs.getString(k));
         }
       j++; }
     
    //利用输出流将数据集写入到硬盘的文件中,操作结束后,关闭输出流
     FileOutputStream fileOut = new FileOutputStream("c:\\reportExport.xls");
     wb.write(fileOut);
     fileOut.close();
      }catch(Exception e ){}}
      

  8.   

    用poi可以解决,你搜索一下就能找到
      

  9.   

    tondayong1981(tongdayong):请问是写在JAVABEAN里吗?在JSP页面怎么调用,怎么让它在点打印的时候直接弹出EXCEL,能写的详细点吗