想把 jsp从数据库根据条件查询出来的数据  直接通过一个按钮控制 点击按钮 调用一个方法  将table里的数据导入到excle中     求这个方法的写法。。  菜鸟级别  忘详细说明   希望附带代码jspexcle

解决方案 »

  1.   

    一种是前台 js 导出 excel (这种没用过)
    http://www.blogjava.net/itwangyuxia/archive/2011/12/20/366820.html
    一种是用后台 jxl 或 poi 生成
    http://www.cnblogs.com/raymond19840709/archive/2008/06/26/1230289.html网上使用帮助都挺多的而且比较详细
      

  2.   

    js导出 会报错   我找了很多都报同样的错   错误: Automation 服务器不能创建对象jxl 或 poi 还得经过数据库查询吧??   我想把jsp页面上经过模糊查询出来的数据直接导到excle就行 。。jxl poi 感觉还得用到输入输出流复杂化了吧??
      

  3.   

    经过数据库的话纯js就太不现实了吧。
    原来我做过一个报表查询的,自动返回execl报表,应该和你要求差不多,需要的话引用下,晚上回去找找。
      

  4.   

    用poi生成吧,下载个jar包,挺方便的,代码嘛
    [code=java]
     if("excel".equals(request.getParameter("OutputType"))) { 
          response.reset();
          response.setContentType("application/vnd.ms-excel;charset=UTF-8"); 
          response.addHeader("Content-Disposition","attachment; filename=\""+java.net.URLEncoder.encode("demo.xls","utf-8")+"\"");     
       }else{
         response.setContentType("text/html;charset=UTF-8");
         out.println("<link href=\"/anareport/css/AnaReport_Standard.css\" rel=\"stylesheet\" type=\"text/css\">");
         out.println("<script type=\"text/javascript\" src=\"/anareport/common/js/Common.js\"></script>");  
       }
    %>
    <meta   http-equiv="Content-Type"   content="application/vnd.ms-excel;charset=UTF-8"> 
    <script type="text/javascript" src="/anareport/common/tableShowJs/TableSorter.js"></script>  
    <script type="text/javascript" defer="defer">
        function ShowExcel() { 
         var oriAction =fm.action;
         var oriTarger = fm.target;
       fm.target = "_blank";
            fm.method="POST";
       fm.action="/anareport/newpolicylist.do?actionType=query&OutputType=excel";
       fm.submit();
       fm.target = oriTarger;
       fm.action = oriAction;
        }
        function tableSort(){
         new TableSorter("ResultTable");
        }
    </script>
    [/code]
    没整理  项目中直接粘过来的  你自己参考一下吧
      

  5.   

    function ExportToExcel(tableId) //读取表格中每个单元到EXCEL中  

        try{       
                var curTbl = document.getElementById(tableId); 
                var oXL = new ActiveXObject("Excel.Application"); 
                //创建AX对象excel  
                var oWB = oXL.Workbooks.Add(); 
                //获取workbook对象  
                var oSheet = oWB.ActiveSheet; 
               
                var lenRow = curTbl.rows.length; 
                //取得表格行数  
                for (i = 0; i < lenRow; i++) 
                { 
                    var lenCol = curTbl.rows(i).cells.length; 
                    //取得每行的列数  
                    for (j = 0; j < lenCol; j++) 
                    { 
                        oSheet.Cells(i + 1, j + 1).value = curTbl.rows(i).cells(j).innerText;  
                         
                    } 
                } 
                oXL.Visible = true; 
                //设置excel可见属性  
          }catch(e){ 
                if((!+'\v1')){ //ie浏览器  
                  alert("无法启动Excel,请确保电脑中已经安装了Excel!\n\n如果已经安装了Excel,"+"请调整IE的安全级别。\n\n具体操作:\n\n"+"工具 → Internet选项 → 安全 → 自定义级别 → ActiveX 控件和插件 → 对未标记为可安全执行脚本的ActiveX 控件初始化并执行脚本 → 启用 → 确定"); 
               }else{ 
                   alert("请使用IE浏览器进行“导入到EXCEL”操作!");  //方便设置安全等级,限制为ie浏览器  
               } 
           } 
    }
    这个方法测试后ie下可用,个人认为后台处理最好,不需要考虑浏览器兼容性,而且灵活性更高一些,熟悉了的话一张简单的报表导出很快就可以做出来了,除非有那种很恶心的单元格合并,然后要求导出的表格能够精确打印,恶心的按规则分页打印什么的,还要好看还要好用,确实很费时间。
      

  6.   

    五楼的 我用了这个 浏览器报错错误: 属性“ExportToExcel”的值为 null、未定义或不是 Function 对象
      

  7.   

    /**
     * 获取导出数据总条数
     * @return
     */
    public Long getDownFileDataCount()
    {
    return getResultCount();
    }



    /**
     * 设置导出的查询语句
     */
    public void setDownFileQuerySql()
    {
    //获取查询语句
    createQuery();
    String ejbql = getEjbql();

    //导出的查询语句(列名:对象的属性名)
    String querySql = "select tblSysTransaction.createDate, tblSysTransaction.tranCode, " +
    " tblSysTransaction.tranBalance, tblSysTransaction.createUser, tblSysTransaction.agentRe ";

    setEjbql(ejbql.replace("select tblSysTransaction", querySql));
    }



    /**
     * 获取导出结果集
     */
    @SuppressWarnings("unchecked")
    public List<Object[]> getDownFileData(Long startNum)
    {
    int startNums = Integer.parseInt(Long.toString(startNum));
    // setDownFileQuerySql();
    createQuery();
    return super.createQuery()
    .setFirstResult(startNums)
    .setMaxResults(10000)
    .getResultList();
    }



    /**
     * 导出下载文件
     */
    public void exportCsv()
    {
    //获取存放文件的文件夹路径
    String folderPath = frontUtilService.createDownZipFolder();

    //查询导出数据的总条数
    Long countNum = getDownFileDataCount();

    if (countNum == 0)
    {
    //"数据为空"
    }
    Long pageSize = countNum%10000 == 0 ? countNum/10000 : (countNum/10000)+1;

    String fileName = folderPath
    .concat(UUID.randomUUID().toString().replaceAll("-", ""))
    .concat(".csv");

    FileOutputStream fos = null;
    OutputStreamWriter osw = null;
    BufferedWriter bw = null;
    try 
    {
    fos = new FileOutputStream(fileName);
    osw = new OutputStreamWriter(fos, "GB18030");
    bw = new BufferedWriter(osw);
    //表头
    bw.write("序号,交易日期,交易类型,短信收支条数\r\n");

    int num = 1;
    //循环查询,写文件
    for (Long i = 0l; i < pageSize; i++) 
    {
    //要导出的数据
    List<Object[]> result = getDownFileData(i*10000);

    for (Object[] objects : result) 
    {
    bw.write(Integer.toString(num));
    bw.write(",");
    bw.write( ObjectUtils.toString(objects[0]).substring(0, 19).substring(0, 10) );
    bw.write(",");
    bw.write(  frontUtilService.getCsvStr(InitParameter.getItemLabel("TRAN", ObjectUtils.toString(objects[1]))) );
    bw.write(",");
    bw.write( ObjectUtils.toString(objects[2]));
    bw.write("\r\n");

    num++;
    }
    }

    } catch (FileNotFoundException e1) {
    e1.printStackTrace();
    } catch (UnsupportedEncodingException e1) {
    e1.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    finally
    {
    if (bw != null)
    {
    try {
    bw.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    if (osw != null)
    {
    try {
    osw.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    if (fos != null)
    {
    try {
    fos.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    }

    //下载文件
    frontUtilService.downZipFile(fileName);

    TblUsrAccount tblUsrAccount  = loginUserInfo.getUserInfo();

    //----记录系统操作日志
    TblSysOperate tblSysOperate = new TblSysOperate();
    tblSysOperate.setCreateUser(tblUsrAccount.getLoginName());
    tblSysOperate.setCreateUserDisplay(tblUsrAccount.getDisplayName());
    tblSysOperate.setCreateDate(new Date());
    tblSysOperate.setOperateType("E004");
    tblSysOperate.setItemType("C004");

    //操作对象主键ID
    //tblSysOperate.setItemId(new Long(tblConContact.getContactId()));
    //操作描述
    tblSysOperate.setRe("交易记录导出");
    getEntityManager().persist(tblSysOperate);
    }
    页面按钮调用exportCsv()方法
    public String createDownZipFolder() {
    String folderPath = ServletContexts.instance().getRequest()
    .getSession().getServletContext().getRealPath(File.separator)
    + "downZipFolder" + File.separator; File folder = new File(folderPath);
    if (!folder.exists()) {
    folder.mkdirs();
    }
    return folderPath;
    } public void downZipFile(String fileName) {
    ServletOutputStream servletOutputStream = null;
    ZipOutputStream zipOutputStream = null;
    BufferedInputStream bis = null;
    HttpServletResponse response = null;
    try {
    ExternalContext externalContext = FacesContext.getCurrentInstance()
    .getExternalContext();
    response = (HttpServletResponse) externalContext.getResponse();
    response.setContentType("application/x-msdownload");
    response.setHeader("Content-Disposition", "attachment; filename="
    + new String("downFile".getBytes("gbk"), "iso-8859-1")
    .concat(".zip")); Cookie cookie = new Cookie("downFileStatus", "0");
    response.addCookie(cookie); servletOutputStream = response.getOutputStream();
    CheckedOutputStream checkedOutputStream = new CheckedOutputStream(
    servletOutputStream, new CRC32());
    zipOutputStream = new ZipOutputStream(new BufferedOutputStream(
    checkedOutputStream));
    zipOutputStream.putNextEntry(new ZipEntry("downFile.csv"));
    bis = new BufferedInputStream(new FileInputStream(fileName)); byte[] data = new byte[1024];
    int count;
    while ((count = bis.read(data, 0, 1024)) != -1) {
    zipOutputStream.write(data, 0, count);
    } zipOutputStream.flush();
    servletOutputStream.flush();
    FacesContext.getCurrentInstance().responseComplete();
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    if (zipOutputStream != null) {
    try {
    zipOutputStream.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    if (servletOutputStream != null) {
    try {
    servletOutputStream.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    if (bis != null) {
    try {
    bis.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    } new File(fileName).delete();
    }
    }
    不知道楼主看得懂不  我这是导出csv格式的  不懂可以问
      

  8.   

    我这个是seam框架的  不过应该不分框架的  实现方式应该是一样的
      

  9.   

    哪位大神帮我看看 怎么改错action代码如下:
    import java.io.IOException;   
    import java.io.OutputStream;   
    import java.util.Date;
    import java.util.List;   
    import javax.servlet.http.HttpServletResponse;    
    import org.apache.poi.ss.usermodel.CellStyle;   
    import org.apache.poi.ss.usermodel.Row;   
    import org.apache.poi.ss.usermodel.Sheet;   
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;   
    import org.apache.poi.ss.usermodel.Workbook;   
    import org.apache.struts2.interceptor.ServletResponseAware;    import com.dfjhg.newWeb.biz.JobCourseBiz;
    import com.dfjhg.newWeb.entity.JobCourse;
    import com.opensymphony.xwork2.ActionSupport; 
    public class outExcleAction extends ActionSupport implements ServletResponseAware {
        private static final long serialVersionUID = 1L;     
        private JobCourseBiz jobCourseBiz;   
        private JobCourse jobCourse;
        private int pageNo=1;
        private int pageSize=5;
        private Date date1;
        private Date date2;
        
        public Date getDate1() {
    return date1;
    } public void setDate1(Date date1) {
    this.date1 = date1;
    } public Date getDate2() {
    return date2;
    } public void setDate2(Date date2) {
    this.date2 = date2;
    } public void setJobCourseBiz(JobCourseBiz jobCourseBiz) {
    this.jobCourseBiz = jobCourseBiz;
    }
        
    public JobCourse getJobCourse() {
    return jobCourse;
    }
    public void setJobCourse(JobCourse jobCourse) {
    this.jobCourse = jobCourse;
    }
    public int getPageNo() {
    return pageNo;
    }
    public void setPageNo(int pageNo) {
    this.pageNo = pageNo;
    }
    public int getPageSize() {
    return pageSize;
    }
    public void setPageSize(int pageSize) {
    this.pageSize = pageSize;
    } private String format = "xls";   
        private HttpServletResponse response;   
        private String fileName;      
        public String execute(){      
            @SuppressWarnings("all")   
            List la =jobCourseBiz.listJobCourse(jobCourse, pageNo, pageSize, date1, date2);       
            setResponseHeader();   
            try {   
                exportExcel(response.getOutputStream());   
                response.getOutputStream().flush();   
                response.getOutputStream().close();   
            } catch (IOException e) {   
                e.printStackTrace();   
            }   
            return null;   
        }     
        /** 设置响应头*/   
        public void setResponseHeader(){   
            try{   
              response.setContentType("application/msexcel;charset=UTF-8");  //两种方法都可以   
    //        response.setContentType("application/octet-stream;charset=iso-8859-1");   
                response.setHeader("Content-Disposition", "attachment;filename="   
                        +java.net.URLEncoder.encode(this.fileName, "UTF-8"));   
                //客户端不缓存   
                response.addHeader("Pargam", "no-cache");   
                response.addHeader("Cache-Control", "no-cache");   
            }catch(Exception ex){   
                ex.printStackTrace();   
            }   
        }     
        /**导出数据*/   
        private void exportExcel(OutputStream os) throws IOException{   
            Workbook book = new HSSFWorkbook();   
            Sheet sheet = book.createSheet("导出信息");   
            Row row = sheet.createRow(0);   
            row.createCell(0).setCellValue("编号");   
            row.createCell(1).setCellValue("客户");   
            row.createCell(2).setCellValue("项目");   
            row.createCell(3).setCellValue("项目负责人"); 
            row.createCell(4).setCellValue("服务周期");
            row.createCell(5).setCellValue("项目有无异常");   
            row.createCell(6).setCellValue("备注");
            row.createCell(7).setCellValue("实际金额");
            row.createCell(8).setCellValue("日期");
            CellStyle sty = book.createCellStyle();   
            List<JobCourse> list = jobCourseBiz.listJobCourse(jobCourse, pageNo, pageSize, date1, date2);   
            for (int i = 1; i < list.size(); i++) {   
                JobCourse jobCourse = list.get(i-1);   
                row = sheet.createRow(i);   
                row.createCell(0).setCellValue(jobCourse.getJc_id());   
                row.createCell(1).setCellValue(jobCourse.getJc_cust().getCust_name());   
                row.createCell(2).setCellValue(jobCourse.getJc_item());   
                row.createCell(3).setCellValue(jobCourse.getJc_itemPrincipal());  
                row.createCell(4).setCellValue(jobCourse.getJc_cust().getCust_serviceCycle());
                row.createCell(5).setCellValue(jobCourse.getJc_abnormity());   
                row.createCell(6).setCellValue(jobCourse.getJc_other());
                row.createCell(7).setCellValue(jobCourse.getJc_factMoney());
                row.createCell(8).setCellValue(jobCourse.getJc_date());
            }   
            try{   
                book.write(os);   
            }catch(Exception ex){   
                ex.printStackTrace();   
            }   
        }    
        public String getFormat() {   
            return format;   
        }   
        public void setFormat(String format) {   
            this.format = format;   
            this.fileName = "导出数据.xls";   
        }   
        public String getFileName() {   
            return fileName;   
        }   
        public void setFileName(String fileName) {   
            this.fileName = fileName;   
        }   
        /**记住一定有该属性的set方法*/   
        public void setServletResponse(HttpServletResponse response) {   
            this.response = response;   
        }   
    }  
      

  10.   

    jsp代码如下:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@page import="com.dfjhg.newWeb.entity.JobCourse"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>项目</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link href="css/style.css" rel="stylesheet" type="text/css">
    <script src="script/common.js"></script>
     <script src="script/Calendar.js"></script>
    </head>
    <body>
    <div class="page_title">管理员管理>工作历程管理</div>
    <div class="button_bar">
    <button onclick="to('Abnormity_get')">近期不正常项目</button>
    <input type="hidden" name="format" value="xls" />
    <input type="button" onclick="to('OutExcle.action');" value="导入到EXCEL">
    </div>
    <s:form action="JobCourse_get" method="post" enctype="multipart/form-data">
    <div class="button_bar">
    <button class="common_button" type="submit">查询</button>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <button class="common_button" onclick="to('Customer_get')">返回</button>
    </div><table class="query_form_table">
    <tr>
    <th>日期</th>
    <td>
    <input type="text" name="date1" value="" readOnly onClick="setDay(this);"/>
    --
    <input type="text" name="date2" value="" readOnly onClick="setDay(this);"/>
    </td>

    </tr>
    </table>
    </s:form>
    <br />
    <table class="data_list_table" id="tb">
    <% float totalMoney=0;%>
    <tr>
    <th>序号</th>
    <th>客户</th>
    <th>项目</th>
    <th>项目负责人</th>
    <th>有无异常</th>
    <th>备注</th>
    <th>服务周期</th>
    <th>实际金额</th>
    <th>日期</th>

    <th>操作</th>
    </tr>
    <tr> 
     <s:set var="totalMoney" value="0" />
    <s:iterator id="jobCourse" value="listJc" status="status">
    <tr>
    <td class="list_data_number"><s:property value="#status.index+1"/></td>
    <td class="list_data_text"><s:property value="jc_cust.cust_name"/></td>
      <td class="list_data_text"><s:property value="jc_item"/></td>
    <td class="list_data_text"><s:property value="jc_itemPrincipal"/></td>
    <td class="list_data_text"><s:property value="jc_abnormity"/></td>
    <td class="list_data_text"><s:property value="jc_other"/></td>
    <td class="list_data_text"><s:property value="jc_cust.cust_serviceCycle"/></td>
    <td class="list_data_text"><s:property value="jc_factMoney"/></td> 
     <s:set var="totalMoney" value="#totalMoney+jc_factMoney" />
    <td class="list_data_text"><s:property value="jc_date"/></td>
    <s:url id="edit" value="JobCourse_find">
         <s:param name="jobCourse.jc_id" value="jc_id"></s:param>
         </s:url>
         <s:url id="del" value="JobCourse_delete">
         <s:param name="jobCourse.jc_id" value="jc_id"></s:param>
         </s:url>
    <td class="list_data_op">
    <s:a href="%{edit}"><img title="编辑" src="images/bt_edit.gif" class="op_button" /></s:a>
    <s:a href="%{del}"><img title="删除" src="images/bt_del.gif" class="op_button" /></s:a>
    </td>
    </s:iterator>
    </tr>
    <tr>
    <td class="list_data_number">
    统计金额
    </td>
    <td align="center" colspan="9">
    <s:property value="#totalMoney"/>
    </td>
    </tr>
    <tr>
    <th colspan="100" class="pager">
    <s:form action="JobCourse_get" namespace="/" method="post">
    <div class="pager">
    共<s:property value="pageNum"/>条记录 每页<s:textfield name="pageSize" size="1"></s:textfield>条
    第<s:property value="pageNo"/>页/共<s:property value="pageMax"/>页
    <a href="JobCourse_get.action?pageNo=1">第一页</a>
    <a href="JobCourse_get.action?pageNo=${pageNo>1?pageNo-1:1 }">上一页</a>
    <a href="JobCourse_get.action?pageNo=${pageNo<pageMax?pageNo+1:pageMax }">下一页</a>
    <a href="JobCourse_get.action?pageNo=${pageMax }">最后一页</a>
    转到<s:textfield name="pageNo" size="1"></s:textfield>页
    <button style="width: 30px;" type="submit">GO</button>
    </div>
    </s:form>
    </th>
    </tr>
    </table>
    </form>
    </body>
    </html>struts如下:
    <action name="OutExcle" class="outExcleAction">
    <result type="redirectAction">JobCourse_get</result>
    </action>application  xml 如下:
    <bean id="outExcleAction" class="com.dfjhg.newWeb.admin.action.outExcleAction">
    <property name="jobCourseBiz" ref="jobCourseBiz"></property>
    </bean> 
      

  11.   

    报错如下::java.lang.NullPointerException
    at java.net.URLEncoder.encode(URLEncoder.java:188)
    at com.dfjhg.newWeb.admin.action.outExcleAction.setResponseHeader(outExcleAction.java:87)
    at com.dfjhg.newWeb.admin.action.outExcleAction.execute(outExcleAction.java:71)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
    at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:619)怎么解决呢  各位大神  
      

  12.   

    示例...package com.linjia.action;import java.io.IOException;
    import java.io.OutputStream;import javax.servlet.http.HttpServletResponse;import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFRichTextString;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;public class LoginAction extends BaseAction{
        public String login(){
         HttpServletResponse response=this.getResponse();
         response.setHeader("Content-disposition","attachment;filename=test.xls");
         response.setContentType("application/msexcel;charset=utf-8");
         try{
         OutputStream out=response.getOutputStream();
         //生成execl
         HSSFWorkbook wb=new HSSFWorkbook();
         HSSFSheet sh=wb.createSheet();
         HSSFRow row=sh.createRow(0);
         HSSFCell cll=row.createCell((short)0);
         cll.setCellValue(new HSSFRichTextString("姓名"));
         HSSFCell cll2=row.createCell((short)1);
         cll2.setCellValue(new HSSFRichTextString("年龄"));
         HSSFRow row1=sh.createRow(1);
         HSSFCell cll3=row1.createCell((short)1);
         cll3.setCellValue(new HSSFRichTextString("李四"));
         HSSFCell cll4=row1.createCell((short)2);
         cll4.setCellValue(new HSSFRichTextString("30"));
         wb.write(out);
         out.flush();
         out.close();
        
         }catch(IOException ex){
         ex.printStackTrace();
         }
         return null;
        }
    }